操作系统第二次实验:创建进程

0.个人信息

姓名:王璐璐

学号:201821121037

班级:计算1812

1.编写程序

用vim编写程序——使用fork()创建两个子进程。代码如下:

 #include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
 int main(){
     pid_t fpid;
     fpid=fork();
     if(fpid<0){
         printf("error");
     }
     else if (fpid==0){
         printf("child process 1,process id: %d\n",getpid());
     }
     else{
         pid_t fpid2=fork();
         if(fpid2<0){
             printf("error2");
         }
         else if(fpid2==0){
             printf("child process 2,process id: %d\n",getpid());
         }
         else{
             printf("parent process,process id: %d\n",getpid());
         }
         sleep(500);         //延迟100秒,进程挂起
     }
 }

编译过程:

操作系统第二次实验:创建进程

得到的程序运行结果图如下:

操作系统第二次实验:创建进程

2.打印进程树

(1)在代码中创建完进程后,使用sleep(500)函数,将进程挂起了500秒。

(2)方法一:打开两个控制台,一个开启程序,一个打印进程树;

(3)使用操作系统第二次实验:创建进程命令打印出上述进程的进程树,结果如下:

操作系统第二次实验:创建进程

其中15250为父进程的pid号,15251和15252分别为两个子进程的pid号

(4)方法二:用“&”将进程放置后台运行,再打印进程树

操作系统第二次实验:创建进程

3.解读进程相关信息

3.1解读操作系统第二次实验:创建进程

(1)下图中红色框表示的是查找到的与创建的父子进程相关的进程信息:

操作系统第二次实验:创建进程

(2)执行操作系统第二次实验:创建进程后,会有以下几个字段

UID        PID  PPID  C STIME TTY          TIME CMD

(3)根据执行fork.c程序,解释上述的几个字段含义:

①UID:表示用户的ID。在该实验中,用户ID是wanglulu,这是我登录服务器时的用户名;

②PID:表示某一个进程的ID号。在该实验中,fork.c创建了三个进程,其进程ID号分别为15250,15251,15252;

③PPID:表示某一个进程的父进程ID号。在该实验中,fork.c创建了一个父进程和两个子进程,从结果图中可以看出进程ID15251和15252的父进程ID均为15250;

操作系统第二次实验:创建进程

④C:表示CPU使用的资源百分比。在该实验中,三个进程的资源百分比均为0;

⑤STIME:表示程序启动时间。从该实验的结果图中,可以发现创建父进程的同时会将两个子进程创建好,这三个进程的创建时间是一致的;

⑥TTY:表示进程与控制终端的关联值。由于fork.c中创建的三个进程是父子关系,这三个进程最后得到TTY值是一样的,值pts/1表示在桌面Linux中是标准输出;

⑦TIME:表示进程使用的总CPU时间。由结果图可知,创建进程无需使用CPU

⑧CMD:所下达的指令名称

3.2解读操作系统第二次实验:创建进程

(1)下图是执行操作系统第二次实验:创建进程命令后得到的字段结果:

操作系统第二次实验:创建进程

(2)执行操作系统第二次实验:创建进程后,会有以下几个字段:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

(3)根据执行fork.c程序,解释上述的几个字段含义:

①USER:表示的含义与使用“ps -ef”中的字段“UID”相类似;

②PID:同“ps -ef”中的“PID”;

③%CPU:同“ps -ef”中的“C”;

④%MEM:表示该进程所占用的物理内存百分比。在该实验中显示这三个进程所占的物理内存百分比均为0;

⑤VSZ:表示的是该进程使用掉的虚拟内存量 (Kbytes)。由结果图可以看出父进程和第二个子进程均开辟了4508Kbytes大小的空间,由于第一个子进程处于僵死状态,第一个子进程并未占空间,即每次使用fork()创建一个进程时,都会开辟一个大小相同的虚拟内存空间;

⑥RSS:表示的是该进程占用的固定的内存量 (Kbytes)。从结果图中可以看出父进程所占用的固定内存量比子进程的大很多,子进程所占有的固定内存量是一致的;

⑦TTY:同“ps -ef”中的“TTY”;

⑧STAT:表示的是该程序目前的状态。由结果图中可以得出,父进程和第二个子进程正处于睡眠状态中,而第一个子进程处于终止状态,但父进程未将该子进程进行回收;

⑨START:表示的是该进程被触发启动的时间;

⑩TIME:表示的是该进程实际使用 CPU 运作的时间;COMMAND:同“ps -ef”中的“CMD”

4.问题

(1)创建的子进程中,第一个子进程的状态处于僵死状态,还未找到错误处;

5.相关链接

TTY值的取值含义解释:https://blog.csdn.net/u013115811/article/details/78849165

操作系统第二次实验:创建进程

上一篇:你要了解的Linux~~


下一篇:Linux磁盘与文件系统管理