操作系统第2次实验报告:创建进程
Posted un-cy233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统第2次实验报告:创建进程相关的知识,希望对你有一定的参考价值。
零、个人信息
- 姓名:陈韵
- 学号:201821121053
- 班级:计算1812
一、编写程序
在服务器上用VIM编辑器编写一个程序:一个进程创建(fork)两个子进程。
cyFork.cpp源代码如下:
1 #include <stdio.h> 2 #include <unistd.h> 3 int main() 4 { 5 int pid1, pid2; //创建2个子进程 6 pid1 = fork(); 7 if (pid1 == -1) 8 { 9 printf("fork错误!! "); 10 return 0; 11 } 12 else if (pid1 == 0) 13 { 14 printf("子进程1的id为:%d ", getpid()); 15 } 16 else 17 { 18 //为父进程,则创建第二个子进程 19 pid2 = fork(); 20 if (pid2 == -1) 21 { 22 printf("fork错误!! "); 23 return 0; 24 } 25 else if (pid2 == 0) 26 { 27 printf("子进程2的id为:%d ", getpid()); 28 } 29 else 30 { 31 printf("父进程的id为:%d ", getpid()); 32 } 33 sleep(300); //延迟便于挂起进程 34 } 35 }
二、打印进程树
1、编译并运行cyFork.cpp文件,同时将进程挂起至后台,以便打印进程树。
(18035即为父进程的ID)
将上述命令运行后得到如下结果:
2、利用进程树的打印命令,根据父进程的ID打印出进程树。
三、解读进程的相关信息
1、ps -ef命令 (grep用于快速筛选出我刚创建的进程)
1 chenyun@jmu-cs-ubuntu:~$ ps -ef | grep "cy"
2 字段: UID PID PPID C STIME TTY TIME CMD
3 chenyun 18035 15168 0 16:28 pts/3 00:00:00 ./cy
4 chenyun 18036 18035 0 16:28 pts/3 00:00:00 ./cy
5 chenyun 18037 18035 0 16:28 pts/3 00:00:00 ./cy
对各个字段的解释如下:
- UID:用户ID
- PID:进程ID
- PPID:父进程的ID
- C:进程占用CPU的百分比
- STIME:进程启动的时间
- TTY:该进程在哪个终端机器上运作,若与终端机无关,则显示? ; 若为pts/0等等,则表示远程登录。这里pts/3表示我是远程登录
- TIME:进程实际使用CPU的时间
- CMD:所下达的命令名称,这里运行了文件cy: ./cy
2、ps -aux命令
1 chenyun@jmu-cs-ubuntu:~$ ps -aux | grep "cy"
2 字段: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
3 chenyun 18035 0.0 0.0 4508 748 pts/3 S 16:28 0:00 ./cy
4 chenyun 18036 0.0 0.0 4508 68 pts/3 S 16:28 0:00 ./cy
5 chenyun 18037 0.0 0.0 4508 68 pts/3 S 16:28 0:00 ./cy
对各个字段的解释如下:
- USER:该进程的使用者账号
- PID:进程的ID
- %CPU:进程占用CPU资源百分比
- %MEM:进程占用物理内存百分比
- VSZ:进程使用掉的虚拟内存量(Kbytes)
- RSS:进程占用的固定内存量(Kbytes)
- TTY:该进程在哪个终端机器上运作,若与终端机无关,则显示? ; 若为pts/0等等,则表示远程登录。这里pts/3表示我是远程登录
- STAT:该进程目前的状态。这里列举出主要的状态如下:
- R:run该程序目前正在运作,或位于队列中
- S:sleep该程序目前正在睡眠中
- T:track or stop该程序目前正停止或者被追踪
- Z:zombie该进程已终止,但是其父进程没有将其回收,导致其成为僵尸进程
- START:进程启动的时间
- TIME:进程实际使用CPU的时间
- COMMAND:所下达的命令名称,这里运行了文件cy: ./cy
四. 通过该实验产生新的疑问及解答
1、在VIM编辑代码没有提示功能很难受,因此我试图自己用编辑器编写完cpp代码再拷贝到VIM里,但格式错乱。
可以在VIM中运行命令set paste,当下面的INSERT后跟着(paste),表明进入粘贴模式
2、我如何快速查看我所创建的进程的相关信息?
在ps命令后利用管道与grep命令,快速筛选出匹配的信息。
3、当我调用ps命令时,即使利用了快速匹配搜索,也无法找到我所创建的进程的相关信息。
我盲猜是进程被挂起的时间太短导致我在试图输出进程信息时,进程终止了。审查源代码时发现果不其然,当我把sleep函数的时间设置得更长后,我成功输出了进程的相关信息。
以上是关于操作系统第2次实验报告:创建进程的主要内容,如果未能解决你的问题,请参考以下文章