观察Linux进程的异步并发执行

上传人:cn****1 文档编号:455483762 上传时间:2023-06-26 格式:DOCX 页数:5 大小:12.02KB
返回 下载 相关 举报
观察Linux进程的异步并发执行_第1页
第1页 / 共5页
观察Linux进程的异步并发执行_第2页
第2页 / 共5页
观察Linux进程的异步并发执行_第3页
第3页 / 共5页
观察Linux进程的异步并发执行_第4页
第4页 / 共5页
观察Linux进程的异步并发执行_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《观察Linux进程的异步并发执行》由会员分享,可在线阅读,更多相关《观察Linux进程的异步并发执行(5页珍藏版)》请在金锄头文库上搜索。

1、实验三、观察Linux进程的异步并发执行实验目的通过实验,使学生理解进程与程序的区别,加深对进程概念的理解;掌握进程并发执行的原 理,理解进程并发执行的特点,区分进程并发执行与串行执行;了解fork()系统调用的返 回值,掌握用fork()创建进程的方法;预习:实验指导书;实验环境: Linux系统,C语言实验内容及要求1. 编写一 C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使 父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显 示“I am son”,女儿进程执行时屏幕显示“I am daughter”。2. 多次连续反复运

2、行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为 止。记下这种情况,试简单分析其原因。3. 修改程序,利用nice ()改变各进程的优先级,观察不同情况下进程调度效果的 区别。4. 修改程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进, 多次反复运行改进后的程序,观察并记录运行结果。实验结果 (可续页)1、实现代码如下:#include #include #include #include int main(void)pid_t pid1;pid_t pid2;pid1=fork();if(pid10)printf(Error.NO.1 fock call

3、failn);else if(pid1 = 0)printf(I am father.);elsepid2=fork();if(pid20)printf(Error.NO.2 fock call failn);else if(pid2 = 0)printf(I am son.”);elseprintf(I am daughter.);printf(Fork end.nn);exit(0);2、运行结果如下:(1) 首次出现:I am father.Fork end.I am son.I am daughter.Fork end.(2) 出现不同:I am father.Fork end.I a

4、m son.Fork end.I am daughter.Fork end.出现不同原因:函数fork()并不是进行进程切换,而是复制一个当前进程。父进程中, 操作系统对fork的实现,使这个调用在父进程中返回刚刚创建的子进程的pid,所以下面的 if语句中pid0, pid=0的两个分支都不会执行。所以父进程中输出I am father.子进程在之后的某个时候得到调度,它的上下文被换入,占据CPU,操作系统对fork 的实现,使得子进程中fork调用返回0。所以在这个进程中pid=0。这个进程继续执行的过 程中,if语句中pid0不满足,但是pid=0是true。所以输出I am son.I

5、 am daughter.3、实验代码如下:#include #include #include #include int main(void)pid_t pidl;pid_t pid2;pid1=fork();if(pid10)printf(Error.NO.1 fock call failn);else if(pid1 = 0)nice (10);sleep (10);printf(I am father.);elsepid2=fork();if(pid20)wait(0);for (i=0;i5;i+)printf(I am father.n); sleep(1);else iffor

6、(i=0;i5;i+)printf(I am son.n);sleep(1);elsefor (i=0;i5;i+)printf(I am daughter.n); sleep(1);exit(0);执行结果如下所示:I am daughter.I am daughter.I am daughter.I am daughter.I am daughter.I am son.I am son.I am son.I am son.I am son.I am father.I am father.I am father.I am father.I am father.(续前页)后记1.如何让子进程的执行代码有别于父进程?在父进程中,利用fork ()函数,并且在此之后,判断其返回值,根据其值执行不同 代码。如第一个实验中,子进程在之后的某个时候得到调度,它的上下文被换入,占据CPU, 操作系统对fork的实现,使得子进程中fork调用返回0。所以在这个进程中pid=0。这个进 程继续执行的过程中,if语句中pid0不满足,但是pid=0是true。所以输出I am son.I am daughter.因此,可以根据fork ()函数来区别子进程和父进程。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

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