如果父有多个孩子,它决定了它将在WEXITSTATUS上检索哪个状态?

时间:2013-04-15 05:29:02

标签: c

对不起,我不熟练使用fork()的机制,所以答案可能很简单。要详细说明我的问题,如果我多次运行fork(),比如使用for循环,我使用WEXITSTATUS(status)从/ a子项中检索信息,是什么决定了我获得的信息?

1 个答案:

答案 0 :(得分:2)

wait() or waitpid()函数返回尸体的PID,状态值是属于该尸体的状态。

int   status;
pid_t corpse = wait(&status);

if (corpse > 0)
{
    if (WIFEXITED(status))
        printf("Process %d died with exit status %d\n", (int)pid, WEXITSTATUS(status));
    else if (WIFSIGNALED(status))
        printf("Process %d died from signal %d\n", (int)pid, WTERMSIG(status));
    else
        printf("Process %d was reported with status 0x%.4X\n", (int)pid, status);
}

您可以在大多数实际系统(通常是WCOREDUMP(signal))上找到有关核心转储的信息,但POSIX并未将其标准化。 else子句涵盖的选项包括WIFSTOPPEDWIFCONTINUED,以及其他一些选项。请参阅系统的waitpid()手册页。