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

个人信息:

姓名:张越

班级:计算1811

学号:201821121006

1. 编写程序

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

 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<unistd.h>
  4 int main()
  5 {
  6     pid_t pid;
  7     int i ;
  8     for(i=0;i<2;i++){
  9         pid=fork();
 10         if(pid<=0)
 11             break;
 12     }
 13     if(pid<0){
 14         printf("error in fork\n");
 15     }
 16     else if(pid==0){    //子进程
 17         printf("child process,process id is %d\n",getpid());
 18     }
 19     else {    //父进程
 20         printf("parent process,process id is %d\n",getpid());
 21     }
 22     sleep(1000);  //延迟
 23     return 0;

2. 打印进程树

进程结果:

 

 

 

打印进程树:

 

 

 

3. 解读进程相关信息

(1) ps -ef

使用ps -ef给出所创建进程的信息,并分析每个字段的含义

UID        PID  PPID  C STIME TTY       TIME    CMD
zhangyue 20383 20141  0 14:21 pts/3    00:00:00 ./firsttest
zhangyue 20384 20383  0 14:21 pts/3    00:00:00 ./firsttest
zhangyue 20385 20383  0 14:21 pts/3    00:00:00 ./firsttest

分析字段的的含义

UID: 表示用户ID

PID: 进程的ID号,上述程序产生三个进程,它们的ID分别为20383,20384和20385

PPID: 父进程的ID,进程20383的父进程是进程20141,进程20384和进程20385的父进程是20383 

C: CPU使用的资源百分比

STIME: 系统启动时间

TTY: 终端的次要装置号码

TIME: 进程使用CPU的时间

CMD: 所下达的指令名称

 

(2) ps -aux

使用ps -aux给出所创建进程的信息,并分析每个字段的含义。

USER       PID  %CPU %MEM  VSZ   RSS TTY      STAT START   TIME COMMAND
zhangyue 20383  0.0  0.0   4508   764 pts/3    S    14:21   0:00 ./firsttest
zhangyue 20384  0.0  0.0   4508    72 pts/3    S    14:21   0:00 ./firsttest
zhangyue 20385  0.0  0.0   4508    72 pts/3    S    14:21   0:00 ./firsttest
  • USER:进程所属用户的用户名;
  • PID:进程号;
  • %CPU:占用的CPU使用率;
  • %MEM:占用的内存使用率;
  • VSZ:占用的虚拟机内存大小;
  • RSS:占用的内存大小;
  • TTY:终端的次要装置号码;
  • START:进程开始时间;
  • COMMAND:进程执行的指令。‘

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

1.ps-aux指令执行后 start常见的状态除了S,还有哪些?

D:无法中断的休眠状态

R:正在运行可中在队列中可过行的

T:停止或被追踪

W:进入内存交换

2.sleep()函数的意义:

用于延时,我个人觉得跟cmd命令行中的pause的作用很相似。

3.我发现了在Ubuntu 用ps-aux的命令时候,每一次都有记录并且还可以查看其他用户的动态。

4,同一个进程在执行的时候,每次执行都有不同的进程的id号。

 

posted on 2020-04-05 15:05  huluntunzao  阅读(305)  评论(0编辑  收藏  举报