2014-03-12 57 views
0

我處理的一些問題,我有一個在處理信號的功能,這樣的:行爲時,多個信號發送

void sigChld(int noSig) 
{ 
//some action here 
} 

void F1() // some child process 
{ 
struct sigaction action; 
.... // initialisation of the structure with sigChld as the function handler 
sigaction(SIGCHLD, &action, 0); 

while(1) 
callToFunction(); 
} 

在我的子進程F1,我處理程序連接到sigCHLD sigCHld()然後我做callToFunction()創建另一個進程並做一些處理。在執行結束時,它向我發送一個SIGCHLD,我需要在我的處理程序中對待它。

現在我的問題是:我需要callToFunction()的返回值,所以我想在執行一些操作之前在sigchld的處理程序中使用waitpid。但是如果在waitpid()或動作中,callToFunction()發送另一個信號呢?當前的處理程序會停止嗎?或將繼續執行,然後處理下一個信號?

在我的問題中,我需要一個接一個地完整處理信號,就好像我正在並行執行處理程序一樣。

回答

0

我不確定在一個SIGCHLD處理程序中的waitpid()實際上是否可能被一個信號中斷,因爲如果有一個可用的子程序,它應該立即返回,但是通常信號可以在信號處理程序中發生像其他地方一樣。