
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
请说出解题思路,谢谢! 展开
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
请说出解题思路,谢谢! 展开
3个回答
展开全部
D 3
wait(&num)等待子进程退出,并且捕获子进程的退出状态,pid==0为子进程,退出调用了exit(3),
所以wait捕获的就是3
wait(&num)等待子进程退出,并且捕获子进程的退出状态,pid==0为子进程,退出调用了exit(3),
所以wait捕获的就是3
追问
可惜,答案不是D
追答
num为3,题中打印的是WIFEXITED(num)的值,所以是1没错,子进程是正常退出的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,
WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。
WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。
----------->3
WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。
WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。
----------->3
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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.
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);正常退出了,所以就是真的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询