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

------------恢复内容开始------------

  • 姓名:蒋浩天
  • 学号:201821121024
  • 班级:计算1811

1. 编写程序

在服务器上用VIM编辑 器编写一个程序:一个进程创建(fork)两个子进程。给出源代码:

  1 #include
  2 #include
  3 #include
  4 int main()
  5 {
  6     pid_t pid;
  7     for(int i=0;i<2;i++){
  8         pid=fork();
  9         if(pid<=0)
 10             break;
 11     }
 12     if(pid<0)
 13         printf("error in fork!");
 14     else if(pid==0)
 15         printf("child process,my process id is %d\n",getpid());
 16     else
 17         printf("parent process,my process id is %d\n",getpid());
 18     sleep(300);
 19     return 0;
 20 }

运行结果:

 

 

2. 打印进程树

 

 

3. 解读进程相关信息

(1) ps -ef

使用ps -ef给出所创建进程的信息,根据进程号找到这次实验创建的进程。

UID        PID  PPID  C STIME TTY          TIME CMD
...
jiangha+ 21971 16560  0 11:16 pts/4    00:00:00 ./a.out
jiangha+ 21972 21971  0 11:16 pts/4    00:00:00 ./a.out
jiangha+ 21973 21971  0 11:16 pts/4    00:00:00 ./a.out

分析字段:

UID:用户ID(但输出的是用户名)

PID:进程的ID 

PPID:父进程的ID (可以看到进程21972、21973的父进程都是21971,符合实验)

C:进程占用CPU的百分比。

STIME:进程启动的时间 。

TTY:该进程在哪个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 

TIME: 进程使用CPU的时间。

CMD:命令的名称和参数。

(2) ps -aux

使用ps -aux给出所创建进程的信息,根据进程号找到这次实验创建的进程。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
jiangha+ 21971  0.0  0.0   4508   744 pts/4    S+   11:16   0:00 ./a.out
jiangha+ 21972  0.0  0.0   4508    72 pts/4    S+   11:16   0:00 ./a.out
jiangha+ 21973  0.0  0.0   4508    72 pts/4    S+   11:16   0:00 ./a.out

分析字段:

USER:用户名。

PID:进程的ID 。

%CPU:进程占用的CPU百分比。

%MEM:占用内存的百分比 。 

VSZ :该进程使用的虚拟內存量(KB)。

RSS :该进程占用的固定內存量(KB)(驻留中页的数量)。

STAT:进程的状态。(S:处于休眠状态,+:位于后台的进程组)

START:该进程被触发启动时间 。

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

刚开始写的程序,不太理解父进程和子进程产生的原理,得到的是一个父进程跟两个子进程,其中一个子进程后面还跟一个子进程,不符合要求。经过多次修改代码,观察进程树,最后解决。

刚开始运行的时候,运行到结束很迅速,没办法得到进程树。根据报告的提示,在代码中放入sleep挂起进程。

在用ps -ef、ps -aux给出进程信息时,得到的是全部进程的信息,我是通过进程号,找到并只截取了实验要的进程。后来发现可以通过ps -ef|grep 指令直接查找到想要的进程。在这里,grep命令是查找,中间的|是管道命令,是指ps命令与grep同时执行。

你可能感兴趣的:(操作系统第2次实验报告:创建进程)