操作系统第2次实验报告:创建进程
- 姓名:徐思婕
- 学号:201821121004
- 班级:计算1811
1. 编写程序
- 在服务器上用VIM编辑器编写一个程序:一个进程创建(fork)两个子进程。给出源代码:
#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
int main()
{ pid_t fpid1,fpid2; if((fpid1=fork())==0) printf("Child1 process,my process id is %d\n",getpid()); else { if((fpid2=fork())==0) printf("Child2 process,my process id is%d\n",getpid()); else printf("Parent process,my process id is %d\n",getpid()); } sleep(1000); return 0; }
- 运行结果:
2. 打印进程树
- 打印1所创建的进程树结构,给出带有自己名字的截图:
3. 解读进程相关信息
(1) ps -ef
- 使用
ps -ef
给出所创建进程的信息:
UID PID PPID C STIME TTY TIME CMD
xusijie 21054 17746 0 16:49 pts/0 00:00:00 ./test
xusijie 21055 21054 0 16:49 pts/0 00:00:00 ./test
xusijie 21056 21054 0 16:49 pts/0 00:00:00 ./test
- 分析每个字段的含义:
UID:用户ID为xusijie
PID:进程ID为21054、21055、21056
PPID:父进程ID为17746、21054、21054
C:CPU使用的资源百分比为0
STIME:进程启动时间为16:49
TTY:登入者的终端机位置
TIME:使用的CPU时间为0
CMD:所下达的指令
(2) ps -aux
- 使用
ps -aux
给出所创建进程的信息:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND xusijie 21054 0.0 0.0 4508 792 pts/0 S 16:49 0:00 ./test xusijie 21055 0.0 0.0 4508 72 pts/0 S 16:49 0:00 ./test xusijie 21056 0.0 0.0 4508 72 pts/0 S 16:49 0:00 ./test
- 分析每个字段的含义:
USER:用户为xusijie
PID:进程ID为21054、21055、21056
%CPU:占用的 CPU 使用率为0
%MEM:占用的记忆体使用率为0
VSZ:占用的虚拟记忆体大小为4508KB
RSS:占用的记忆体大小分别为792、72与72
TTY:登入者的终端机位置
STAT:该进程的状态为S(中断)
START:进程被触发的时间16:49
TIME:使用的CPU时间为0
CMD:所下达的指令
4. 通过该实验产生新的疑问及解答
- Q:STAT是进程的状态,除了S以外还有哪些状态码?
A:
状态码 | 状态 | 含义 |
R | 运行 | 正在运行或在运行队列中等待 |
D | 不可中断 | 收到信号不唤醒和不可运行,进程必须等待直到有中断发生 |
Z | 僵死 | 进程已终止,但进程描述符存在,直到父进程调用wait4()系统调用后释放 |
T | 停止 | 进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信号后停止运行 |