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