在后台获取 child 进程的退出状态
Get exit status of child process on background
通常,如果我想要 child 的退出状态,我会这样做:
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
。使用此标志将导致函数立即 return,之后您需要检查状态以查看进程是否实际退出。
例如:
int child_done;
do {
// do something useful
child_done=0;
if (waitpid(pid,&status,WNOHANG) > 0) {
if (WIFEXITED(status)) {
printf("child exited with status %d\n", WEXITSTATUS(status));
child_done = 1;
}
if (WIFSIGNALED(status)) {
printf("child terminated by signal %d\n", WTERMSIG(status));
child_done = 1;
}
}
} while (!child_done);
通常,如果我想要 child 的退出状态,我会这样做:
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
。使用此标志将导致函数立即 return,之后您需要检查状态以查看进程是否实际退出。
例如:
int child_done;
do {
// do something useful
child_done=0;
if (waitpid(pid,&status,WNOHANG) > 0) {
if (WIFEXITED(status)) {
printf("child exited with status %d\n", WEXITSTATUS(status));
child_done = 1;
}
if (WIFSIGNALED(status)) {
printf("child terminated by signal %d\n", WTERMSIG(status));
child_done = 1;
}
}
} while (!child_done);