操作系统第2次实验报告:创建进程
- 姓名:杨富宏
- 学号:201821121017
- 班级:计算1811
1. 编写程序
在服务器上用VIM编辑器编写一个程序:一个进程创建(fork)两个子进程。给出源代码:
1 #include<sys/types.h> 2 #include<unistd.h> 3 #include<stdio.h> 4 int main() 5 { 6 pid_t f1,f2; 7 int count=0; 8 if((f1=fork())==0) 9 printf("child process is %d\n!",getpid()); 10 else 11 { 12 if((f2=fork())==0) 13 printf("child process is %d\n",getpid()); 14 else if((f2=fork())<0) 15 printf("error!"); 16 else 17 { 18 printf("parents process is %d\n",getpid()); 19 count++; 20 } 21 } 22 printf("couont = %d\n",count); 23 sleep(5000); 24 return 0; 25 }
运行结果截图:

2. 打印进程树
打印1所创建的进程树结构:(yangfuhong@jmu-cs-ubuntu:~$ pstree -p 17135)

3. 解读进程相关信息
(1) ps -ef
UID PID PPID C STIME TTY TIME CMD yangfuh+ 16339 13800 0 16:17 pts/2 00:00:00 ./test yangfuh+ 16340 16339 0 16:17 pts/2 00:00:00 ./test yangfuh+ 16341 16339 0 16:17 pts/2 00:00:00 ./test
UID:表示进程执行者的ID(杨富宏)
PID:进程ID
PPID:父进程ID
C:CPU占用资源的百分比
STIME:表示该进程的启动时间
TTY:终端次要装置号码
TIME:该进程执行的时间
CMD:进程对应的执行命令
(2) ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND yangfuh+ 16339 0.0 0.0 4508 716 pts/2 S 16:17 0:00 ./test yangfuh+ 16340 0.0 0.0 4508 68 pts/2 S 16:17 0:00 ./test yangfuh+ 16341 0.0 0.0 4508 68 pts/2 S 16:17 0:00 ./test
USER: 进程拥有者
PID: 进程的ID
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端次要装置号码
STAT: 该进程的状态,S为中断.
查阅资料得到如下:
1. D :不可中断 Uninterruptible(usually IO)
2. R :正在运行,或在队列中的进程
3. S :处于休眠状态
4. T :停止或被追踪
5. Z :僵尸进程
6. W:进入内存交换(从内核2.6开始无效)
7. X :死掉的进程
8. < :高优先级
9. n:低优先级
10. s: 包含子进程
11. “s+”: 位于后台的进程组
START: 进程开始时间
TIME:进程的执行时间
COMMAND:进程对应执行的命令
4. 通过该实验产生新的疑问及解答
问题:怎么样才可以让进程树为满的状态?
可以再代码里创建进程的时候,父进程和子进程fork()可以设置为2次,这样就编程满的进程树。
还有就是可以设置一个变量float来显示进程树的层数,每加一层float+1。

浙公网安备 33010602011771号