文档详情

实验2进程控制.doc

发布:2017-02-03约2.33千字共6页下载文档
文本预览下载声明
操作系统实验报告 实验题目:Linux进程的创建 专 业 信息与计算科学 学 生 姓 名 彭颖涵 班 级 学 号 B130801081 指 导 教 师 叶宁 指 导 单 位 计算机学院 软件教研室 日 期 教师评语 教师签名: 年 月 日 成绩评定 备 注 实验目的 了解进程与程序的区别,加深对进程概念的理解。 掌握进程并发执行的原理,理解进程并发执行的特点,区分进程并发执行与串行执行。 了解fork()系统调用的返回值,掌握用fork()创建进程的方法。 熟悉wait,exit等系统调用。 实验内容 编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“parent”,儿子进程执行时屏幕执行“son”,女儿进程执行时屏幕显示”daughter”。 多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。 修改程序,在父、子进程中分别使用wait,exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。 三、实验指导 Linux中与进程控制相关的几个主要系统调用 名/格式/参数 功??能 返回值的解释 fork( )、vfork( ) 创建一个字进程 对父进程:返回子进程号 对子进程:返回0 错误:返回-1 #include unistd.h execve(char *file,char **argv,char **envp) 用指定程序覆盖当前程序代码 正确:0 错误:-1 #include sys/types.h #include sys/wait.h pid_t wait(int *statloc) 等待进程终止 正确:子进程的ID 错误:-1 getpid( )、getppid( ) 获得进程号 #include stdio.h void exit(int status) 进程正常结束 四、实验步骤(附程序原码) parent.c #includestdio.h main() { int p1,p2,i; while((p1=fork())==-1); /*创建子进程p1*/ if(p1==0) for(i=0;i4;i++) printf(daughter %d\n,i); else { while((p2=fork())==-1); /*创建子进程p2*/ if(p2==0) for(i=0;i4;i++) printf(son %d\n,i); else for(i=0;i4;i++) printf(parent %d\n,i); } } son.c #includestdio.h #includestdlib.h main() { int pid; pid=fork();/*创建子进程*/ switch(pid) { case -1: printf(fork fail!\n); /*创建失败*/ exit(1); case 0: /*子进程*/ printf(subprocess!\n); exit(0); default: /*父进程*/ wait(0); /*同步*/ printf(completed !\n); exit(0); } } 五、运行结果及其结果分析 c@ubuntu:~$ gcc -o abc parent.c c@ubuntu:~$ ./abc parent 0 parent 1 parent 2 parent 3 c@ubuntu:~$ son 0 son 1 son 2 son 3 daughter 0 daughter 1 daughter 2 daughter 3 c@ubuntu:~$ gcc -o abcd son.c c@ubuntu:~$ ./abcd subprocess! completed ! fork()返回值意义如
显示全部
相似文档