c-在后台获取子进程的退出状态



通常,如果我想要孩子的退出状态,我只需要:

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

最新更新