操作系统实验二 进程控制
16281049 王晗炜 计科1601
实验题目
-
打开一个vi进程。通过ps命令以及选择合适的参数,只显示名字为vi的进程。寻找vi进程的父进程,直到init进程为止。记录过程中所有进程的ID和父进程ID。将得到的进程树和由pstree命令的得到的进程树进行比较。
-
使用ps逐步查找
-
首先在所在目录下使用vi打开一个文本文件,启动vi进程:
-
之后在终端中使用ps命令配合grep命令查找该进程:
-
在这里-ef表示显示出进程的完整信息,以下依次为结果各列对应的项:
- UID:程序被该 UID 所拥有
- PID:就是这个程序的ID
- PPID:则是其上级父程序的ID
- C:CPU使用的资源百分比
- STIME:系统启动时间
- TTY:登入者的终端机位置
- TIME:使用掉的CPU时间。
- CMD:所下达的是什么指令
-
根据其父进程继续查找,直到找到进程init:
如图所示进程1便是我们要找到了init进程,至此查询结束。
-
-
使用pstree查找
-
直接在终端中查询init进程的进程树:
-
如图所示其子进程众多,我们转而查询进程1017的进程树:
-
所标记的即为我们需要查找的子树
-
-
二者比较
使用ps命令查找是从当前进程一步步寻找父进程,是一个自底向上的过程,而pstree指令与之相反,是一个自顶向下的过程,前者查找的信息较为全面且精确,但需要操作的步数较多,而后者给出的信息虽然较少,但结构一目了然,不过在子进程较多的情况下寻找所需信息也较为复杂。因此这两种方法应结合实际情况具体分析选择使用。
-
-
编写程序,首先使用fork系统调用,创建子进程。在父进程中继续执行空循环操作;在子进程中调用exec打开vi编辑器。然后在另外一个终端中,通过ps –Al命令、ps aux或者top等命令,查看vi进程及其父进程的运行状态,理解每个参数所表达的意义。选择合适的命令参数,对所有进程按照cpu占用率排序。
-
按照题目要求编写程序,一下为源代码
2-2.c
:#include <sys/types.h> #include <unistd.h> #include <stdio.h> int main(){ pid_t pid; pid = fork(); if (pid > 0){ printf ("I am the parent of pid=%d!\n", pid); while(1); } else if (!pid){ printf ("I am the baby!\n"); int ret; ret = execl ("/usr/bin/vi", "vi","/home/anjinggufa/桌面/lab2/2-2.c", NULL); if (ret == -1) perror ("execl"); } else if (pid == -1) perror ("fork"); return 0; }
-
在终端下使用gcc编译并运行该程序:
-
之后使用ps命令查询父进程的进程号:
-
使用top命令查看二者的进程运行状况:
在top命令中p参数
-