求是六六 2015-10-08 08:48 采纳率: 0%
浏览 1544
已结题

深入理解计算机系统 8.3题

#include

int main()
{
if(fork()==0){
printf("a");
}
else{
printf("b");
waitpid(-1,NULL,0);
}

printf("c");

exit(0);

求问这个程序的可能输出序列?
答案给出了acbc,bcac,abcc,bacc四种答案。
但是我觉得不应该有四种,因为fork以后有两个进程,但是父进程会遇到waitpid,这个必须要等到子进程
终止以后,父进程才会继续下去,所以只有三种情况,一是父进程先开始,遇到waitpid等待,知道子进程结束,那么就是bacc,或者是子进程先开始,那么就有acbc,或者是abcc

  • 写回答

2条回答 默认 最新

  • qq1223386926 2015-10-08 13:46
    关注

    waitpid(-1,NULL,0);应该主要是这个函数调用的原因:
    第一次参数为-1时,任何子进程退出waitpid()都将返回,不一定是自己的子进程,所以bcac,这种情况是可能存在的

    评论

报告相同问题?

悬赏问题

  • ¥15 求解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果