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

  • 姓名:林顺达
  • 学号:201821121022
  • 班级:计算1811

1. 编写程序

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

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main()
{
        pid_t p1,p2;
        int count=0;
        if((p1=fork())==0)
        {
                printf("CHILD FROCESS,My process id is %d\n",getpid());
        }
        else
        {
                if(p2=fork()==0)
                {
                        printf("CHILD PROCESS,My process id is %d\n",getpid());
                }
                else
                {
                        printf("PARENT PROCESS,My process id is %d\n",getpid());
                        count++;
                }
        }
        printf("count: %d\n",count);
        sleep(10000);
        return 0;
}

2. 打印进程树

3. 解读进程相关信息

(1) ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD
linshun+ 22735 22608  0 17:03 pts/6    00:00:00 ./a.out
linshun+ 22736 22735  0 17:03 pts/6    00:00:00 ./a.out
linshun+ 22737 22735  0 17:03 pts/6    00:00:00 ./a.out

UID:该进程执行的用户ID

PID:进程ID

PPID:该进程的父级进程ID

C:CPU占用率,单位:%

STIME:进程的启动时间

TTY:终端的次要装置号码 (minor device number of tty)

TIME:进程的执行时间

CMD:进程的名称或对应的路径

分析:

  通过PID与PPID的匹配,从下至上找到有关的子进程与父进程

  分析一个进程创建两个子进程的进程ID 可以发现22736与22737的父进程均为22735

  上述即印证了前面给出的进程树(一个进程创建了两个子进程)

  通过CMD可以看见 三个进程同属于(./a.out) 即该(./a.out)进程的主进程已经两个子进程

(2) ps -aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
linshun+ 22735  0.0  0.0   4508   792 pts/6    S+   17:03   0:00 ./a.out
linshun+ 22736  0.0  0.0   4508    72 pts/6    S+   17:03   0:00 ./a.out
linshun+ 22737  0.0  0.0   4508    72 pts/6    S+   17:03   0:00 ./a.out

USER: 进程拥有者

PID:进程ID

%CPU:占用的 CPU 使用率

%MEM:占用的记忆体使用率

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

RSS:占用的记忆体大小

TTY:终端的次要装置号码 (minor device number of tty)

STAT:该行程的状态,linux的进程有5种状态:

  – D 不可中断 uninterruptible sleep (usually IO)

  – R 运行 runnable (on run queue)

  – S 中断 sleeping

  – T 停止 traced or stopped

  – Z 僵死 a defunct (”zombie”) process–注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优内存锁页)

START:行程开始时间

TIME:执行的时间

COMMAND:所执行的指令

分析:

  VSZ(占用的虚拟记忆体大小)均为1508 而RSS(占用的记忆体大小)则是父进程较大 两个子进程较小 且相同

  STAT为S+ S+的意思可以分解为 正在休眠中与位于后台的进程组 印证了前面使用'unsigned sleep(unsigned seconds)'挂起进程

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

疑问:

  为什么CPU与MEM均为0.0

解答:

  由于上面的程序CPU与内存占用量较少故导致CPU与MEM均显示0

  编写一个python程序 较大数的循环累加和 输入一个较大的数使其循环累加

  使用ps -aux得出:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
linshun+ 27618  8.5  0.5  29108  9480 pts/6    S+   17:36   0:06 python3 add.py

  运行此程序后 该进程的CPU占用率为8.5%,内存使用率为0.5%均不为0

  所以可以得出 上个程序的CPU与MEM数据为0是由于程序进程本身占用量不大导致的

posted @ 2020-04-02 17:35  丶Lin  阅读(336)  评论(0编辑  收藏  举报