对不起,我不熟练使用fork()的机制,所以答案可能很简单。要详细说明我的问题,如果我多次运行fork(),比如使用for循环,我使用WEXITSTATUS(status)从/ a子项中检索信息,是什么决定了我获得的信息?
答案 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
子句涵盖的选项包括WIFSTOPPED
和WIFCONTINUED
,以及其他一些选项。请参阅系统的waitpid()
手册页。