当前位置: 技术问答>linux和unix
请教关于fork以及waitpid的问题
来源: 互联网 发布时间:2016-11-01
本文导语: 本帖最后由 qiuchuan119 于 2011-01-04 15:19:26 编辑 在深入理解计算机系统中有一道习题如下: 要求分析下面程序的输出 #include "csapp.h" int main() { int status; pid_t pid; printf("Hellon"); pid = Fork(); printf("%dn", !pid);...
要求分析下面程序的输出
#include "csapp.h"
int main()
{
int status;
pid_t pid;
printf("Hellon");
pid = Fork();
printf("%dn", !pid);
if (pid != 0)
{
if (waitpid(-1, &status, 0) > 0)
{
if (WIFEXITED(status) != 0)
printf("%dn", WEXITSTATUS(status));
}
}
printf("Byen");
exit(2);
}
书上的答案如下:
|-> “0”->“2”->“bye”:父进程
”hello“->|
|->“1”->“bye”:子进程
但是我觉得答案应该是:
|-> “1”->“2”->“bye”:父进程
”hello“->|
|->“0”->“bye”:子进程
刚刚接触这个东西,请高手帮忙指教一下
|
fork()之后,父进程的pid非0,而子进程的pid=0
父进程执行waitpid(),阻塞
子进程退出之后,父进程的waitpid()才能返回,然后输出子进程的退出状态2
父进程执行waitpid(),阻塞
子进程退出之后,父进程的waitpid()才能返回,然后输出子进程的退出状态2