OS第2次实验报告:创建进程
Posted will-h
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OS第2次实验报告:创建进程相关的知识,希望对你有一定的参考价值。
- 姓名:巫艳珍
- 学号:201821121034
- 班级:计算1812
1. 编写程序
在服务器上用VIM编辑器编写一个程序:一个进程创建(fork)两个子进程。给出源代码:
#include<sys/types.h> #include<stdio.h> #include<unistd.h> int main() { pid_t fpid; for(int i=0;i<2;i++){ fpid=fork(); if(fpid<0||fpid==0){ break; } } sleep(40); if(fpid<0) printf("error in fork!"); else if(fpid==0){ printf("Child process,my process id is %d ",getpid()); } else{ printf("Parent process,my process id is %d ",getpid()); } return 0; }
使用gcc Hello.c -o Hello进行编译,并用命令./Hello让其在后台运行:
运行结果:
2. 打印进程树
打印1所创建的进程树结构,给出带有自己名字的截图。
- 在程序中使用
sleep(40)来
挂起进程,以便打印进程树 - 打印进程树命令:
pstree -p 27609
3. 解读进程相关信息
(1) ps -ef:
使用ps -ef
给出所创建进程的信息,并分析每个字段的含义。结果如下:
wuyanzhen@jmu-cs-ubuntu:~$ ps -ef|grep "Hello" UID PID PPID C STIME TTY TIME CMD wuyanzh+ 30559 26522 0 23:21 pts/5 00:00:00 ./Hello wuyanzh+ 30560 30559 0 23:21 pts/5 00:00:00 ./Hello
wuyanzh+ 30561 30559 0 23:21 pts/5 00:00:00 ./Hello
- 每个字段的含义:
UID:表示该进程的使用者id,当前进程使用者为:wuyanzhen
PID:表示进程的ID,给出的例子中,ID分别为:30559,30560,30561
PPID:表示该进程的父进程,在给出的例子中,进程30559的父进程为26522,进程30560和30561的父进程ID均为30559
C:表示进程占用CPU的百分比,例子取值为0说明该进程未占用CPU
STIME:表示程序的启动时间,给出的例子程序启动时间为23:21
TTY:表示该进程的登录终端,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 pts/5表示第五个虚拟终端
TIME:表示该程序的执行时间
CMD:表示命令的名称和参数,用./Hello执行Hello文件
- 小结:
- PID和PPID分别代表子进程和父进程,并能够相互匹配
- 将打印出的进程信息与进程树对应起来,程序成功实现了由一个进程创建两个子进程
(2) ps -aux
使用ps -aux
给出所创建进程的信息,并分析每个字段的含义。
- 每个字段的含义:
USER:指用户名,即当前进程的拥有者
PID:表示进程ID,给出的例子中有三个进程,分别为30559,30560,30561
%CPU:指该进程占用CPU的百分比
%MEM:表示该进程占用内存的百分比,给出的例子为0,表示三个进程均未占用内存
VSZ:表示该进程使用的虚拟內存量(KB),由上图可知,三个进程使用的虚拟内存量都是4376KB
RSS:表示该进程占用的固定內存量(KB),进程30559占用固定内存为752KB,进程30560和30561占用固定内存都为72KB
TTY:表示该进程的登录终端,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 pts/5表示第五个虚拟终端(同(1))
STAT:表示进程的状态,常见的有:
D(TASK_UNINTERRUPTIBLE):表示不可中断的睡眠状态(通常IO的进程),指的是进程不响应异步信号
S (TASK_INTERRUPTIBLE):表示可中断的睡眠状态,即上图三个进程的状态,由于等待某事件的发生而被挂起
R (TASK_RUNNING):表示可执行状态,只有在该状态的进程才可能在CPU上运行
T (TASK_STOPPED or TASK_TRACED):表示暂停或跟踪状态
Z (TASK_DEAD – EXIT_ZOMBIE):表示退出状态,进程占有的所有资源将被回收,该进程成为僵尸进程
X (TASK_DEAD – EXIT_DEAD):表示退出状态,该进程被彻底释放,即将被销毁
START:表示该进程被触发启动的时间,上图表示启动时间为23:21
TIME:表示该进程实际使用CPU运行的时间,给出的例子中,时间为0
COMMAND:表示命令的名称和参数,用./Hello执行Hello文件
4. 通过该实验产生新的疑问及解答
Q1:打开两个终端,在一个终端执行完程序后,在另一个终端通过得到的进程ID却无法打印出进程树
解答:将程序放入后台运行,用得出的父进程ID打印出进程树
Q2:为何执行上述程序时,执行的时间是0
解答:因为运行时速度较快,还不够1ms,所以是时间为0
以上是关于OS第2次实验报告:创建进程的主要内容,如果未能解决你的问题,请参考以下文章