第2次实验报告:创建进程
0. 个人信息
- 姓名 雷坛春
- 学号 201821121030
- 班级 计算1811
1. 编写程序
在服务器上用VIM编辑器编写一个程序:一个进程创建(fork)两个子进程。给出源代码:
#include<sys/types.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> int main() { int i; pid_t pid; //设置进程产生的个数 printf("This is the parent process,pid=%u",getpid());//打印父进程 for(i=0;i<2;++i){ pid=fork(); if(pid==0){ printf("\nThis is %d child process ,pid=%u",i+1,getpid());//打印子进程 return 0; } } sleep(20);//进程挂起 return 0; }
2. 打印进程树
1.编译1中所写的程序,并在后台运行
2.根据父进程的PID,打印出进程树
3. 解读进程相关信息
(1) ps -ef
leitanchun@jmu-cs-ubuntu:~$ ps -ef | grep "fork" UID PID PPID C STIME TTY TIME CMD
leitanc+ 28609 26454 0 11:19 pts/1 00:00:00 ./fork
leitanc+ 28610 28609 0 11:19 pts/1 00:00:00 [fork] <defunct>
leitanc+ 28611 28609 0 11:19 pts/1 00:00:00 [fork] <defunct>
UID: 代表执行者的身份
PID: 进程的ID号,上述程序产生三个进程,它们的ID分别为28609,28610和28611
PPID: 父进程的ID,进程28609的父进程是进程26454,进程28610和进程28611的父进程是28609
C: CPU使用的资源百分比
STIME: 系统启动时间
TTY: 终端的次要装置号码
TIME: 进程使用CPU的时间
CMD: 所下达的指令名称,运行可执行文件的命令./fork
(2) ps -aux
leitanchun@jmu-cs-ubuntu:~$ ps -aux | grep "fork" USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND leitanc+ 28609 0.0 0.0 4508 800 pts/1 S+ 11:19 0:00 ./fork leitanc+ 28610 0.0 0.0 0 0 pts/1 Z+ 11:19 0:00 [fork] <defunct> leitanc+ 28611 0.0 0.0 0 0 pts/1 Z+ 11:19 0:00 [fork] <defunct>
USER: 进程拥有者
PID: 进程的ID号
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码
STAT: 该进程的状态,S表示中断
START: 进程开始时间
TIME:进程使用CPU的时间
COMMAND:所执行的指令,运行可执行文件的命令./fork
4. 通过该实验产生问题及解答
问题:运行时,一直捕捉不到进程树
解答:可以适当地增加进程挂起时间,以便于观察。