【发布时间】:2021-12-23 08:17:17
【问题描述】:
我想在做另一项工作时启动一个子进程,并能够检查子进程是否在父进程中完成。我发现waitpid 的 WNOHANG 选项有助于在能够跟踪它的同时不等待子完成。但是,status 变量在使用此选项时完全没有变化,就像我将其替换为 0 时一样。
你对这种行为有什么解释吗?我怎样才能做我想做的事(能够在父进程中知道孩子是否做了,而不用挂它)?
我有以下代码
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include<sys/wait.h>
int main(){
int status;
printf("status=%d\n",status);
pid_t p = fork();
if(p==0){
printf("je suis dans le fils\n");
exit(0);
}
else if(p>0){
printf("je suis dans le père\n");
waitpid(p,&status,WNOHANG);
sleep(5);
printf("status= %d",status);
exit(0);
}
}
请多多包涵,我对 C 的了解并不深,还在学习中。
【问题讨论】:
-
等待后需要再次拨打
waitpid。您的status变量以后不会神奇地填充。 -
您可以为
SIGCHLD信号创建一个处理程序。这将在孩子退出时运行,它可以调用wait()。