福建农林大学操作系统实验报告二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学操作系统实验报告二
《操作系统》实验报告(二)
Linux下的编程(综合性 2学时) 1、实验目的:
1) 熟悉Linux的进程机制。 2)熟悉LINUX环境编程。 2、实验内容:(1)完成LINUX系统的登录,启动终端。
(2)创建一个新用户,名为dd1。要求记录操作步骤或命令序列。
切换用户dd1
(3)进程查看命令PS的使用探讨,使用ps命令选项:-l –al ,记录命令的结果。
(4)编写一个程序,创建一个子进程,显示“New process.”子进程在休眠(15秒)后,通过调用getpid()和getppid()获取父、子进程的id后结束并退出exit()。父进程调用waitpid()等待子进程结束,并同样返回其父、子进程的id。(提示:运行过程中配合ps -l命令查看进程的家族关系。)
回答问题:当父进程不等待子进程的结束时,运行结果如何?请分析原因。运行结果:
原因:父进程执行到wait的时候,会阻塞等待子进程的结束,一个wait函数只调用一次,如果只有一个wait,其他的子进程在父进程结束后会成为孤儿进程
init进程收养。采用不阻塞方式调用waitpid的话,父进程不会等待,没执行完的子进程将会成为孤儿进程
(5)进程的创建:编制一段程序,使用系统调用fork( )创建两个子进程,在该程序运行时,在系统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,子进程分别显示字符 b和字符c。试观察、记录并分析屏幕上,进程运行的情况。(提示:运行过程中配合ps -l 命令查看进程的家族关系。)
运行结果:
附:系统调用函数说明:
(1)fork()函数,创建一个新进程。格式:int fork()
其中返回int取值意义如下:
0:创建子进程,从子进程返回的id值 >0:从父进程返回的子进程id值 -1:创建失败
(2)getpid()与getppid();
获取进程及其父进程的id.
(3) waitpid(pid,status,options) 可用调用格式:waitpid(0,NULL,0) 功能:waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用 waitpid()时子进程已经结束,则 waitpid()会立即返回子进程结束状态值。参数设置:pid=0,表示等待进程组识别码与目前进程相同的任何子进程; status=NULL,表示忽略进程的结束状态;
options=0,表示不提供了一些额外的选项来控制waitpid。(4)相关的头文件包含如下: #include #include 3、实验结果分析:
(1)讨论第(4)和(5)题中的进程的家族关系。答:在第四题中进程4413的父进程是4412
在第五题中输出b和c的进程是输出a的进程的子进程 4、总结:你对本次实验有什么体会或看法。
本次实验探究了操作系统中字符进程的关系,较为复杂,需用通过多次反复的实验来进行总结和归纳才能得出正确的结论。