操作系统lab2实验作业

  1. 1、打开一个vi进程。通过ps命令以及选择合适的参数,只显示名字为vi的进程。寻找vi进程的父进程,直到init进程为止。记录过程中所有进程的ID和父进程ID。将得到的进程树和由pstree命令的得到的进程树进行比较。

实验步骤:

 

  • 使用PS命令查询父进程

使用ps -ef|grep vi 查找vi进程,得知为2870号

Ps-ef显示所有进程号

所有进程的ID和父进程ID为:2870->2859->2209->1509->1091->937->1

pstree查询命令进程树

找寻2870

可以看到,可以看到 我们得到的进程树结果是一样的

  1. 2、编写程序,首先使用fork系统调用,创建子进程。在父进程中继续执行空循环操作;在子进程中调用exec打开vi编辑器。然后在另外一个终端中,通过ps –Al命令、ps aux或者top等命令,查看vi进程及其父进程的运行状态,理解每个参数所表达的意义。选择合适的命令参数,对所有进程按照cpu占用率排序。

(一)熟悉fork函数使用操作:

调用fork函数,系统会将代码复制,并新建一个进程继续往下执行,会产生两个返回值,若返回值为-1,则说明创建子进程失败,若返回值为0,则进入子进程,若返回值是一个大于0的数,则此部分为主进程,这个大于0的数为子进程的进程号

(二)程序编写:

实验要求子进程打开vi编辑器,主进程实现空循环。

子进程通过execl函数调用vi命令打开编辑器

主进程用空循环来起到保持程序运行状态的作用

ps-a命令显示的结果为正确执行结果,子进程打开了vi编辑器,主进程依旧在执行

  • 查看每个进程的状态及cpu占用

终端输入top可以看到,改命令将主机中的所有进程全部动态显示了出来,并且按照cpu使率进行了排序,主进程cpu占用率为98.3%,状态为R,是执行状态,下面的s状态是休眠状态

  1. 3、使用fork系统调用,创建如下进程树,并使每个进程输出自己的ID和父进程的ID。观察进程的执行顺序和运行状态的变化。

P1为此代码执行的主进程,产生2个子进程P2,P3,在P2进程中,再fork创建两个子进程P4,P5

程序运行结果如下:

可以看出

由执行结果可知,p1进程的pid号为7706;

p2进程的pid号为7707,父进程的pid号为7706,即p1;

p3进程的pid号为7708,父进程的pid号为7706,即p1;

p4的pid号为7709,父进程的pid号为7707,即p2;

p5的pid号为7710,父进程的pid号为7707,即p2;

  1. 4、修改上述进程树中的进程,使得所有进程都循环输出自己的ID和父进程的ID。然后终止p2进程(分别采用kill -9 、自己正常退出exit()、段错误退出),观察p1、p3、p4、p5进程的运行状态和其他相关参数有何改变。

执行程序后每个进程都循环输出自己的进程号和父进程号,如下图所示:

具体展示如下:

打开另一个终端,找到进程2的pid号7754,在另一个终端中输入kill -9 -7754,终止掉进程2

可以看出7754已经defunct状态

P2被kill掉

p2段代码修改为:

可以看到,p4、p5进程的父进程转为7833,在进程树上与p1进程是兄弟节点关系,同时p2进程被正常终止。

修改代码为:

github代码链接:

https://github.com/waguyu/waguyu/blob/master/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9Flab2.docx

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值