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)实验结果与分析
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 | less
其中,
-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 firefox
p
下面命令将显示进程名为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
链接: 操作系统实验报告 实验1 VMware虚拟机配置与linux基本命令(答案全).
链接: 操作系统实验报告 实验3存储管理实验(答案全).
链接: 操作系统实验报告 实验4 文件系统管理实验(答案全).