《linux操作系统设计实践》实验一进程管理

上传人:xzh****18 文档编号:34633186 上传时间:2018-02-26 格式:DOC 页数:4 大小:81KB
返回 下载 相关 举报
《linux操作系统设计实践》实验一进程管理_第1页
第1页 / 共4页
《linux操作系统设计实践》实验一进程管理_第2页
第2页 / 共4页
《linux操作系统设计实践》实验一进程管理_第3页
第3页 / 共4页
《linux操作系统设计实践》实验一进程管理_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《《linux操作系统设计实践》实验一进程管理》由会员分享,可在线阅读,更多相关《《linux操作系统设计实践》实验一进程管理(4页珍藏版)》请在金锄头文库上搜索。

1、Linux操作系统设计实践实验一:进程管理实验目的:(1) 加深对进程概念的理解,明确进程和程序的区别。 (2) 进一步认识并发执行的实质。 (3) 学习通过进程执行新的目标程序的方法。 (4) 了解Linux系统中进程信号处理的基本原理实验环境:红帽操作系统实验内容:1.进程的创建 fork() 。2. 使用 exec 函数族使子进程执行新的目标程序。 3.编写一段程序,使其实现进程的软中断通信实验代码的验证:1.编写一段程序,使用系统调用 fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”:子进程分别显示

2、“b”和“c” 。试观察记录屏幕上显示结果,并分析原因。#includeint main()int p1 ,p2 ;while(p1=fork()=-1); if(p1=0) putchar(b);printf(“n”);elsewhile(p2=fork()=-1); if(p2=0) putchar(c);printf(“n”);else putchar(a);printf(“n”); return 0;实验结果:如上所示:a,b,c 出现的顺序是是不固定的。分析:fork()会产生一个新的子进程。如果 fork 成功则在父进程会返回新建立的子进程标识好(PID) ,而子进程会返回 0;如

3、果 fork()失败则是返回-1.fork ()是一个返回两个参数数的函数,如果 fork()返回值大于 0 时,代表创建 fork()函数的下一句是由父进程执行的。如果返回值为 0 时,代表创建 fork()函数的下一句是由子进程执行的。因此,上诉程序会形成三个进程:父进程打印字符 a,子进程 1 打印字符 b,子进程 2 打印字符 c。由并发程序运行,可知这三个进程运行的顺序是不固定的。2使用 exec 函数族使子进程执行新的目标程序。#include #include int main()char * argv =ls, -a, /home/s030802214/test, (char*

4、) 0;execv(/bin/ls,argv);return 0;实验结果:分析:execv()函数的原型: int execv(const cher* path, char *const argv); 其中一个参数指定执行文件所代表的路径,第二个参数利用数组指针来传递给执行文件。所以上诉程序的效果与输入 shell 命令:ls -a 的结果是一样的。3.使用系统调用 fork()创建两个子程序,再用系统调用 signal()接收父进程从键盘上来的中断信号(即按 Ctrl+c 键) ;当有中断信号后,父进程用系统调用 Kill()向两个子进程发出信号,子进程有信号后分别输出Child Proc

5、essll is Killed by Parent!Child Processl2 is Killed by Parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is Killed!=#include#includeint wait_mark;void waiting()while(wait_mark=1);void stop()wait_mark=0;int main()int p1,p2;while(p1=fork()=-1);if(p1=0)wait_mark=1;signal(SIGINT,SIG_IGN);signal(16,stop);wa

6、iting();printf(Child Process11 is Killed by Parent!n);exit(0);elsewhile(p2=fork()=-1);if(p2=0)wait_mark=1;signal(SIGINT,SIG_IGN); signal(17,stop);waiting();printf(Child Process12 is Killed by Parent!n);exit(0);elsewait_mark=1;signal(SIGINT,stop);waiting();kill(p1,16);kill(p2,17);wait(0);wait(0);prin

7、tf(Parent Process is Killed!n);exit(0);实验结果:分析:上述程序中子进程 1.和子进程 2 都有 signal(SIGINT,SIG_IGN), 的系统调用,故当键盘按下 Ctrl+c 键时这两进程不会响应。这两个子进程一开始都有 waiting()故这两个进程就相当与阻塞了,当 CPU 运行到父进程时收到来着键盘的信号于是执行 stop()函数,则接着父进程执行 kill()系统调用,故分别向子进程 1,子进程 2 发送信号 16,17.这时子进程收到来自父进程的信号,则去执行 signal(16/17 ,stop )系统调用,stop()相当于解除阻塞,故子进程向下运行。而这时父进程执行 wait(0)系统调用,这个调用的功能是阻塞自己,当子进程中的一个退出时返回,解除阻塞。故当子进程 1 和子进程 2 都结束时父进程解除了两个由于 wait(0)的阻塞,继续执行。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号