waitpid会阻止已停止的工作吗?

时间:2009-10-03 17:10:58

标签: unix process

我有一个接收SIGTSTP信号的子进程。 当我打电话

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);
}
}

1 个答案:

答案 0 :(得分:4)

您错过了WUNTRACED选项waitpid(第三个参数)。否则,在作业终止之前它不会返回。

设置WUNTRACED选项后,由于SIGTTINSIGTTOUSIGTSTPSIGSTOP信号而停止的当前进程的子级也报告了他们的状态(来自mac手册页)。