通常,如果我想要孩子的退出状态,我只需要:
int pid=fork();
switch(pid)
{
case -1:
/*Error treatment*/
exit(1);
case 0:
/*Child part*/
exit(0);
default:
waitpid(pid,&status,0)
WIFEXITED(status);
}
然后我在status
上有退出状态。
问题是,当进程处于后台时,我显然不想执行waitpid()
,所以我不知道如何在状态中存储退出值。
谢谢你的帮助!
派生子进程后,父进程将需要使用WNOHANG
标志定期调用waitpid
。使用此标志将导致函数立即返回,之后您需要检查状态以查看进程是否真的退出。
例如:
int child_done;
do {
// do something useful
child_done=0;
if (waitpid(pid,&status,WNOHANG) > 0) {
if (WIFEXITED(status)) {
printf("child exited with status %dn", WEXITSTATUS(status));
child_done = 1;
}
if (WIFSIGNALED(status)) {
printf("child terminated by signal %dn", WTERMSIG(status));
child_done = 1;
}
}
} while (!child_done);