【问题标题】:Does waitpid blocks on a stopped job?waitpid 是否会阻塞已停止的作业?
【发布时间】:2009-10-03 17:10:57
【问题描述】:

我有一个收到 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);
}
}

【问题讨论】:

    标签: unix process


    【解决方案1】:

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

    当设置了WUNTRACED 选项时,由于SIGTTINSIGTTOUSIGTSTPSIGSTOP 信号而停止的当前进程的子进程也会报告其状态(来自 mac man页)。

    【讨论】:

    • 非常感谢您的回答。我应该正确阅读文档。我在我的大型程序中浪费了两个小时来寻找其他错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2016-03-01
    • 2017-10-12
    • 2013-06-03
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    相关资源
    最近更新 更多