当前位置: 技术问答>linux和unix
进程管理
来源: 互联网 发布时间:2016-07-23
本文导语: 下列程序执行时,系统调用函数wait(0)的作用是什么?理论上“parent:child”可能在“child leaving”前打印吗?为什么?程序执行结果输出中 a = ?为什么? { int a; ... a = 55; pid = fork(); if(pid==0){...
下列程序执行时,系统调用函数wait(0)的作用是什么?理论上“parent:child”可能在“child leaving”前打印吗?为什么?程序执行结果输出中 a = ?为什么?
{ int a;
...
a = 55;
pid = fork();
if(pid==0){ sleep(5);
a = 99;
sleep(5);
printf("child leavingn");
exit(0);
}else{ sleep(7);
printf("a = %dn",a);
wait(0);
printf("parent: child exitedn");
}
...
}
{ int a;
...
a = 55;
pid = fork();
if(pid==0){ sleep(5);
a = 99;
sleep(5);
printf("child leavingn");
exit(0);
}else{ sleep(7);
printf("a = %dn",a);
wait(0);
printf("parent: child exitedn");
}
...
}
|
调用wait(0)时让父进程堵塞,等待子进程退出
“parent:child”不可能在“child leaving”前打印
因为wait(0)让父进程堵塞了
a=55,因为a=99是在子进程中赋值,不影响父进程。
|
wait(0)等待一个子进程退出,所以理论上“parent:child”不能在“child leaving”前打印.
|
mark
|
不会出现parent:child”在“child leaving”前打印,因为父进程阻塞在了wait上面,虽然printf都是要用到i/o,但是io屏显也是先来先显示的,子进程的printf先于父进程的printf执行,还有子进程是对父进程数字资源a的一个拷贝,拷贝完之后两个进程各有一个a的版本,他们没有任何关系,修改其中一个对另外一个没任何关系。
|
学习。。。