0
点赞
收藏
分享

微信扫一扫

操作系统实验报告 实验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 <unistd.h>
8. #include <stdio.h>
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)实验结果与分析

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


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

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


有人说两个进程的内容完全一样啊,怎么打印的结果不一样啊,那是因为判断条件的原因,上面列举的只是进程的代码和指令,还有变量啊。执行完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 |

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


其中,

-A:显示所有进程

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

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

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

# ps -A

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


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

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

操作系统实验报告 实验2 进程管理(答案全)_服务器_06

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

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


任务:top命令

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

#top

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


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

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

$ pstree

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


任务:使用ps列印进程树

# ps -ejH

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

# ps axjf

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

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

# ps -eLf

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

# ps axms

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


任务:获得安全信息

输入下列命令:

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

操作系统实验报告 实验2 进程管理(答案全)_服务器_14

# ps axZ

操作系统实验报告 实验2 进程管理(答案全)_服务器_15

# ps -eM

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


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

输入下列命令:

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

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


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

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

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


任务:查找进程

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

$ pgrep firefox
p

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


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

$ pgrep -u root sshd

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


向htop和atop说hello

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

# apt-get install htop

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



# yum install htop

在命令提示行中输入htop:

# htop

操作系统实验报告 实验2 进程管理(答案全)_服务器_22


atop工具

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

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

# atop

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

举报

相关推荐

0 条评论