Linux、C语言进程之间通信

有以下代码:intmain(){pid_tpid;pid=fork();if(pid==0){exit(3);}elseif(pid>0){intnum=0;wait(&... 有以下代码:
int main(){
pid_t pid;
pid = fork();
if(pid == 0){
exit(3);
}
else if(pid > 0){
int num = 0;
wait(&num);
printf("%d\n",WIFEXITED(num));
}
return 0;
}
程序运行的结果为( )。
A 0 B 1 C 2 D 3

请说出解题思路,谢谢!
展开
 我来答
jhx1008
2013-09-13 · TA获得超过617个赞
知道小有建树答主
回答量:336
采纳率:0%
帮助的人:335万
展开全部
D 3
wait(&num)等待子进程退出,并且捕获子进程的退出状态,pid==0为子进程,退出调用了exit(3),
所以wait捕获的就是3
追问
可惜,答案不是D
追答
num为3,题中打印的是WIFEXITED(num)的值,所以是1没错,子进程是正常退出的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
michael_21st
2013-09-13 · 超过27用户采纳过TA的回答
知道答主
回答量:111
采纳率:100%
帮助的人:62.8万
展开全部
wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,
WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。
WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。

----------->3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱问西瓜爱答树
2013-09-13 · TA获得超过1760个赞
知道小有建树答主
回答量:890
采纳率:50%
帮助的人:308万
展开全部
B.1 正常退出。
man的解析。

WIFEXITED(status)
returns true if the child terminated normally, that is, by call‐
ing exit(3) or _exit(2), or by returning from main().
真就是1,假就是0.
追问
能解释的再详细点吗?
追答
wait就是等待子进程结束,子进程exit(3);正常退出了,所以就是真的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式