操作系统实验报告 实验2 进程管理(答案全)

网友投稿 311 2022-09-02

操作系统实验报告 实验2 进程管理(答案全)

这里写目录标题

​​1. 实验目的​​​​2. 实验要求​​​​3. 实验步骤​​

​​实验2.1 父子进程​​​​实验2.2 观察进程状态​​

1. 实验目的

通过本实验,了解Linux系统的父子进程关系。理解操作系统对进程管理采用的数据结构PCB

2. 实验要求

使用fork函数编写代码实现Linux 系统进程创建 Linux 系统常用进程管理命令的使用(操作系统观察级)

3. 实验步骤

实验2.1 父子进程

fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。

[cpp] view plain copy (这里不是命令)1. /* //不要直接复制这里的代码,自己写2. * fork_test.c 3. * version 1 4. * Created on: 2010-5-29 5. * Author: wangth 6. */ 7. #include 8. #include 9. int main () 10. { 11. pid_t fpid; //fpid表示fork函数返回的值 12. int count=0; 13. fpid=fork(); 14. if (fpid < 0) 15. printf("error in fork!"); 16. else if (fpid == 0) { 17. printf("i am the child process, my process id is %d/n",getpid()); 18. printf("我是爹的儿子/n");//对某些人来说中文看着更直白。 19. count++; 20. } 21. else { 22. printf("i am the parent process, my process id is %d/n",getpid()); 23. printf("我是孩子他爹/n"); 24. count++; 25. } 26. printf("统计结果是: %d/n",count); 27. return 0; 28. }

(4)实验结果与分析

fork执行完毕后,出现两个进程,

有人说两个进程的内容完全一样啊,怎么打印的结果不一样啊,那是因为判断条件的原因,上面列举的只是进程的代码和指令,还有变量啊。执行完fork后,进程1的变量为count=0,fpid!=0(父进程)。进程2的变量为count=0,fpid=0(子进程),这两个进程的变量都是独立的,存在不同的地址中,不是共用的,这点要注意。可以说,我们就是通过fpid来识别和操作父子进程的。 还有人可能疑惑为什么不是从#include处开始复制代码的,这是因为fork是把进程当前的情况拷贝一份,执行fork时,进程已经执行完了int count=0;fork只拷贝下一个要执行的代码到新的进程。

实验2.2 观察进程状态

实验步骤: ps命令 输入下面的ps命令,显示所有运行中的进程:

# ps aux |

其中,

-A:显示所有进程

a:显示终端中包括其它用户的所有进程

x:显示无控制终端的进程

任务:查看系统中的每个进程。

# ps -A

任务:查看非root运行的进程

任务:查看用户vivek运行的进程

任务:top命令

top命令提供了运行中系统的动态实时视图。在命令提示行中输入top:

#top

按q退出,按h进入帮助。

任务:显示进程的树状图。 pstree以树状显示正在运行的进程。树的根节点为pid或init。如果指定了用户名,进程树将以用户所拥有的进程作为根节点。

$ pstree

任务:使用ps列印进程树

# ps -ejH

# ps axjf

任务:获得线程信息 输入下列命令:

# ps -eLf

# ps axms

任务:获得安全信息

输入下列命令:

# ps -eo euser,ruser,suser,fuser,f,comm,label

# ps axZ

# ps -eM

任务:将进程快照储存到文件中

输入下列命令:

# top -b -n1 > /tmp/process.log

你也可以将结果通过邮件发给自己:

# top -b -n1 | mail -s 'Process snapshot' you@example.com

任务:查找进程

使用pgrep命令。pgrep能查找当前正在运行的进程并列出符合条件的进程ID。例如显示firefox的进程ID:

$ pgrep firefoxp

下面命令将显示进程名为sshd、所有者为root的进程。

$ pgrep -u root sshd

向htop和atop说hello

htop是一个类似top的交互式进程查看工具,但是可以垂直和水平滚动来查看所有进程和他们的命令行。进程的相关操作(killing,renicing)不需要输入PID。要安装htop输入命令:

# apt-get install htop

# yum install htop

在命令提示行中输入htop:

# htop

atop工具

atop是一个用来查看Linux系统负载的交互式监控工具。它能展现系统层级的关键硬件资源(从性能角度)的使用情况,如CPU、内存、硬盘和网络。

它也可以根据进程层级的CPU和内存负载显示哪个进程造成了特定的负载;如果已经安装内核补丁可以显示每个进程的硬盘和网络负载。输入下面的命令启动atop:

# atop

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:还不懂基础排序算法的性能对比?这篇文章带你涨姿势
下一篇:1.4一题三解:二进制中1的个数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~