如何让子进程在Linux中以父解除阻塞状态退出时调用等待?

时间:2017-05-09 06:47:58

标签: linux process signals

以下是一个示例,waitpid系统调用将阻止父进程,直到子进程退出:

    pid_t pid = fork();
    if (pid < 0) {
        printf("error\n");
        return -1;
    } else if (pid == 0) {
        printf("child\n");
        do_sonmething_in_child();
    } else {
        int status;
        waitpid(pid, &status, 0);
        printf("waitpid returned,do something else\n");
        do_something_else();
    }

我想要实现的是父进程不会被阻止,这可以通过使用信号来完成,所以我改变了我的代码:

void handler(int n) {
    printf("handler %d\n", n);
    int status;
    wait(&status);
}
pid_t pid = fork();
if (pid < 0) {
    printf("error\n");
    return -1;
} else if (pid == 0) {
    printf("child\n");
    do_sonmething_in_child();
} else {
    int status;
    signal(SIGCHLD, handler);
    do_something_else();
}

但另一个问题是,如果孩子退出 信号(SIGCHLD,处理程序) ,孩子将是一个僵尸,我们不能指望孩子退出 信号(SIGCHLD,处理程序) 被调用,那么,如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

您可以在fork()调用之前设置信号处理程序。