在后台获取 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);