操作系统第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 多线程,克隆线程