对于waitpid,我怎么知道孩子是否完成了它的过程?

时间:2016-11-06 00:49:11

标签: c fork waitpid

首先,我分叉孩子做某事, 我使用waitpid(-1, &child_status, WNOHANG);在父母中让父母继续而不是等待孩子完成。

我怎么知道孩子什么时候完成了这个过程?

1 个答案:

答案 0 :(得分:2)

您可以为SIGCHLD设置信号处理程序,该处理程序会在子进程退出时自动发送。

然后,信号处理器可以设置一个全局标志,可以在程序的其他部分定期检查。如果设置了标记,请致电waitwaitpid以获取孩子的退出状态。

int child_exit_flag = 0;

void child_exit(int sig)
{
    child_exit_flag = 1;
}

...

signal(SIGCHLD, child_exit);

...

if (child_exit_flag) {
    pid_t pid;
    int status;

    child_exit_flag = 0;
    pid = wait(&status);
    printf("child pid %d exited with status %d\n", pid, status);
}