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

姓名:傅伟杰

班级:计算1811

学号:201821121018

一、实验目的

熟练Linux创建进程fork操作。

二、实验内容

  • 在服务器上用VIM编写一个程序:一个进程创建两个子进程。
  • 查看进程树
  • 查看进程相关信息

三、实验报告

在写报告之前,先仔细阅读:将作业提交到班级博客的一些注意事项

在博文开头给出你的个人信息

提交实验报告,从下面开始(在这之前的内容不需要拷贝到你的实验报告)。


  • 姓名
  • 学号
  • 班级

1. 编写程序

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

#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
    int count = 0;
    pid_t pid,pid2;
    if((pid1 = fork()) == 0)
    {
        printf("child process!@ process id is %d\n",getpid());

    }
    else
    {
        if((pid2 = fork()) == 0)
        {
            printf("child process!@ process id is %d\n",getpid());   
       count++;  }
else { printf("parent process! process id is %d\n",getpid()); count++; } } printf("count: %d\n",count); sleep(2000); return 0;

 

编译运行创建的forktest的c程序,并将输出文件命名为test:

 

 

 

 

 

 

2. 打印进程树

打印进程树:

 

 

 

提示:

  • 使用unsigned sleep(unsigned seconds)挂起进程,以便打印进程树
  • 打印进程树命令pstree -p pid

3. 解读进程相关信息

(1) ps -ef

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

UID        PID  PPID  C STIME TTY          TIME CMD
fuweijie 31017 30702  0 23:24 pts/1    00:00:00 ./test
fuweijie 31018 31017  0 23:24 pts/1    00:00:00 ./test
fuweijie 31019 31017  0 23:24 pts/1    00:00:00 ./test

返回结果各个字段的解释:
UID: 指该进程的使用者(fuweijie)

PID:指该进程的ID,分别是31017,31018,31019

PPID: 指该进程的父级进程的ID 30702

C: 指CPU的占有率

STIME: 程序的启动时间

TTY: 指登录终端

TIME:指程序使用的CPU时间

CMD: 下达的指令, ./test 运行 可执行文件test

通过上面返回的数据清晰的可见,pid 和 ppid字段跟父进程和子进程都是意义匹配的,与进程数是相匹配的。

(2) ps -aux

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

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
fuweijie 31017  0.0  0.0   4508   820 pts/1    S    23:24   0:00 ./test
fuweijie 31018  0.0  0.0   4508    68 pts/1    S    23:24   0:00 ./test
fuweijie 31019  0.0  0.0   4508    68 pts/1    S    23:24   0:00 ./test

返回结果各个字段的解释:

USER :该进程的拥有者(fuweijie)

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

%MEM :占用内存的百分比 

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

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

TTY:终端的次要装置号码

STAT :进程的状态 S,由于sleep函数,所以现在进程处于中断状态

共有5种状态:

1. D 不可中断 uninterruptible sleep (usually IO)

2. R 运行 runnable (on run queue)

3. S 中断 sleeping

4. T 停止 traced or stopped

5. Z 僵死 defunct (”zombie”) process

其它状态还包括W(无驻留页), <(高优先级进程), N(低优内存锁页)

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

TIME:指程序使用的CPU时间

COMMAND: 下达的指令, ./test 运行 可执行文件test 

 

 

 

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

QUESTION:

  ps -aux中 字段 STAT 的值为 :S+代表着什么意思? 跟S(中断状态有什么区别)?

ANSWER:

  S+表示后台的进程组,因为我在上面的运行程序使用都了 /.test & ,讲程序运行到了后台。

  除了+的其他状态类型:

     <    高优先级
        N    低优先级
        L    有些页被锁进内存
        s    包含子进程
        +    位于后台的进程组;
        l    多线程,克隆线程

 

 

posted @ 2020-04-03 00:24  Vijay1  阅读(317)  评论(0编辑  收藏  举报