实验2 进程观察实验 下载本文

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 main( ) {

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 #include #include #include #include #include #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 #include #include

int main(int argc, char* argv[]) {

pid_t pid;

pid = fork();

if(0 == pid) {

printf(\ sleep(5); } else {

wait(NULL);

printf(\ }

return 1;