代码改变世界

操作系统第2次实验报告:创建进程

2020-04-03 13:47  Wangpj  阅读(686)  评论(0编辑  收藏  举报

姓名:王丕杰

学号:201821121052

班级:计算1812

一、实验目的

熟练Linux创建进程fork操作。

二、实验内容

  • 在服务器上用VIM编写一个程序:一个进程创建两个子进程。
  • 查看进程树
  • 查看进程相关信息

 

三、实验报告

1、编写程序

在服务器上用VIM编辑器编写一个程序:一个进程创建(fork)两个子进程。程序命名为 forktest.c

给出源代码:

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<unistd.h>
  4 int main ()
  5 {
  6     pid_t fpid;
  7     for(int i=0;i<2;i++){
  8         fpid=fork();
  9         if(pid==0||pid==-1){
 10          break;
 11         }
 12     }
 13     if(fpid==0){
 14         printf("Child proces: %d\n",getpid());
 15     }
 16     else if(fpid==-1){
 17         printf("error\n");
 18     }
 19     else{
 20         printf("Parent process: %d\n",getpid());
 21     }
 22     sleep(200);
 23     return 0;
 24 }  

2、打印进程树

编译程序并运行:

打印进程树:

3、解读进程相关信息

(1) ps -ef

 相应字段解析:

UID:用户ID(此处为wangpijie)

PID:进程ID(此处为4173、4174、4175等)

PPID:该进程的父进程ID(例如子进程4174、4175对应其父进程4173)

C:该进程占用CPU的百分比(此处为0)

STIME:进程开始时间(此处为11:33)

TTY:登录进程终端机位置(此处为pts/1)

TIME:进程运行时间(此处为00:00:00)

CMD:运行该进程所下达的指令(此处为 ./forktest)

(2) ps -aux

 

相应字段解析:

USER:用户名(此处为wangpijie)

PID:进程ID(此处为4173、4174、4175等)

%CPU:CPU占比(0.0)

%MEN:内存占比(0.0)

VSZ:占用虚拟记忆体的大小

RSS:占用记忆体的大小

TTY:登录进程终端机位置(此处为pts/1)

STAT:进程状态(此处S表示中断,显示S+是因为包括子进程)

START:进程开始时间(此处为11:33)

TIME:进程运行时间(此处为0:00)

COMMAND:运行该进程所下达的指令(此处为 ./forktest)

4、通过该实验产生新的疑问及解答

疑问:实验过程中在运行程序后,执行pstree -p pid仍无法打印出进程树

解答:(1)需要打开两个终端窗口,一个运行程序,一个执行 pstree -p pid 打印进程树

           (2)程序中sleep()挂起进程的时间太短,导致进程树无法打印,增加挂起进程的时间即可