1

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

4

1 回答 1

2

wait()orwaitpid()函数返回尸体的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子句涵盖的选项包括WIFSTOPPEDand WIFCONTINUED,也许还有其他一些选项。请查阅waitpid()您系统的手册页。

于 2013-04-15T05:32:32.320 回答