5、修改程序fork_1.c,在父进程执行” while(1)”之前,添加代码”wait(0);”。在后台执行该程序。显示当前终端上启动的所有进程。解释原因。
6、修改以上程序,在子进程执行” printf(“Is son:\\n”);”之前添加代码 “sleep(1);”。观察多进程的执行序列,解释原因。
7、选作:修改“多进程环境实验”中的参考程序,在“子进程1段”前添加代码“sleep(2);”,在“父进程段b”前添加代码“wait(0); wait(0);”。观察多进程的执行序列,解释原因。试一下作其它修改后的效果?
参考程序
#include
#include
int pid;
pid=fork( ); /*创建子进程*/
switch(pid)
{
case -1: /*创建失败*/ printf(\ exit(1);
case 0: /*子进程*/ printf(“Is son:\\n”);
execl(\
printf(\ exit(1);
default: /*父进程*/ printf(\ while(1) sleep(1); exit(0); }
}
思考题
(1)可执行文件加载时进行了哪些处理?参考程序中,什么时候执行语句 ”printf(\fail!\\n\” ?
(2)实验指导中的第5步,wait( )是如何实现进程同步的? (3)实验指导中的第6步,sleep(1)为什么能导致进程切换?
创建进程:
#include
int main() { pid_t pid; if(-1 == (pid = fork())) { printf(\ return 0; } if(0 == pid) { printf(\ } else { printf(\ } return 0; }
使用wait函数让父进程等待子进程运行结束后才开始运行。注意,为了证明父进程确实是等待子进程运行结束后才继续运行的,我们使用了sleep函数。但是,在linux下面,sleep函数的参数是秒,而windows下面sleep的函数参数是毫秒。 #include
int main(int argc, char* argv[]) {
pid_t pid;
pid = fork();
if(0 == pid) {
printf(\ sleep(5); } else {
wait(NULL);
printf(\ }
return 1;