2009-10-03 16 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