C 对于waitpid,我如何知道孩子是否完成了它的过程?

C 对于waitpid,我如何知道孩子是否完成了它的过程?,c,fork,waitpid,C,Fork,Waitpid,首先,我让孩子做点什么, 我使用waitpid(-1,&child_status,WNOHANG);在父进程中,让父进程继续,而不是等待子进程完成 我怎么知道孩子什么时候完成了这个过程 您可以为SIGCHLD设置一个信号处理程序,该处理程序在子进程退出时自动发送 然后,信号处理器可以设置一个全局标志,该标志可以在程序的其他部分定期检查。如果设置了该标志,请调用wait或waitpid以获取孩子的退出状态 int child_exit_flag = 0; void child_exit(int

首先,我让孩子做点什么, 我使用
waitpid(-1,&child_status,WNOHANG)
;在父进程中,让父进程继续,而不是等待子进程完成


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

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

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

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

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

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

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