操作系统第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错误!!\n");
10         return 0;
11     }
12     else if (pid1 == 0)
13     {
14         printf("子进程1的id为:%d\n", getpid());
15     }
16     else
17     {
18         //为父进程,则创建第二个子进程
19         pid2 = fork();
20         if (pid2 == -1)
21         {
22             printf("fork错误!!\n");
23             return 0;
24         }
25         else if (pid2 == 0)
26         {
27             printf("子进程2的id为:%d\n", getpid());
28         }
29         else
30         {
31             printf("父进程的id为:%d\n", 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:该进程目前的状态。这里列举出主要的状态如下:
  1. R:run该程序目前正在运作,或位于队列中
  2. S:sleep该程序目前正在睡眠中
  3. T:track or stop该程序目前正停止或者被追踪
  4. Z:zombie该进程已终止,但是其父进程没有将其回收,导致其成为僵尸进程
  • START:进程启动的时间
  • TIME:进程实际使用CPU的时间
  • COMMAND:所下达的命令名称,这里运行了文件cy: ./cy  

 四. 通过该实验产生新的疑问及解答

  1、在VIM编辑代码没有提示功能很难受,因此我试图自己用编辑器编写完cpp代码再拷贝到VIM里,但格式错乱。

  可以在VIM中运行命令set paste,当下面的INSERT后跟着(paste),表明进入粘贴模式  

  2、我如何快速查看我所创建的进程的相关信息?

  在ps命令后利用管道与grep命令,快速筛选出匹配的信息。

  3、当我调用ps命令时,即使利用了快速匹配搜索,也无法找到我所创建的进程的相关信息。

  我盲猜是进程被挂起的时间太短导致我在试图输出进程信息时,进程终止了。审查源代码时发现果不其然,当我把sleep函数的时间设置得更长后,我成功输出了进程的相关信息。

posted @ 2020-04-03 19:04  韵韵韵  阅读(320)  评论(0编辑  收藏  举报