2009-10-03 47 views
1

我有一個接收到SIGTSTP信號的子進程。 當我打電話在停止的作業上執行waitpid塊嗎?

waitpid(-1,NULL,0); 

父塊,但在文檔中,它寫道,waitpid函數與PID已停止工作的回報。

#include<unistd.h> 
#include<stdio.h> 
#include<signal.h> 
#include<sys/wait.h> 
main() { 
int pid; 
if((pid=fork()) > 0) { 
    sleep(5); 
    if(kill(pid,SIGTSTP) < 0) 
     printf("kill error\n"); 
    int status; 
    waitpid(-1,&status,0); 
    printf("Returned %d\n",WIFSTOPPED(status)); 
} 
else if(pid==0) { 
    while(1); 
} 
} 

回答

4

你錯過了選項WUNTRACEDwaitpid(第三個參數)。否則,直到作業終止纔會返回。

WUNTRACED選項設置,已停止由於SIGTTINSIGTTOUSIGTSTP,或SIGSTOP信號當前進程的孩子們也有他們的狀態報告(從MAC手冊頁)。

+1

非常感謝你的回答。我應該正確閱讀文檔。我在我的大型項目中浪費了兩個小時來尋找其他錯誤。 – avd 2009-10-03 17:28:54