聂戴成
201821121012
计算1811
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main(){ pid_t fpid; int count=0; fpid=fork(); if(fpid<0) printf("error int fork!"); else if(fpid==0){ printf("Child process,myprocess id is %d\n",getpid()); count++; } else{ printf("Parent proess,my process id is %d\n",getpid()); count++; fpid=fork(); if(fpid<0) printf("error int fork!"); else if(fpid==0){ printf("Child process,myprocess id is %d\n",getpid()); count++; } else{ printf("Parent proess,my process id is %d\n",getpid()); count++; } } printf("Count: %d\n",count); sleep(300); return 0; }
解读:
-ps ef:
UID:创建进程的用户
PID:系统分配给进程的数字ID
PID分配法:
- 对于pid<300的情况值允许分配一次,不可再改变。也就是进程pid分配范围为(300, 32768);
- 每个pid分配成功,便会把当前的pid设置到last_pid, 那么下次pid的分配便是从last_pid+1开始 往下查找。这就意味着当last_pid+1或者附近的进程,刚被杀并回收该pid,此时再创建新进程,很有可能会复用 pid.
链接:https://www.jianshu.com/p/9810b33d2b4e
来源:简书
因而PID是顺序+1的
PPID:父进程的PID
因而2,3个进程的PPID是1的PID
C是进程的CPU占用率
因为进程被挂起了所以占用率为0
STIME是进程时的系统时间
TTY是终端名
pts是虚拟终端
/7代表是第七个虚拟终端
还有:
1、串行端口终端(/dev/ttySn)
2、伪终端(/dev/pty/)
3、控制终端(/dev/tty)
4、控制台终端(/dev/ttyn, /dev/console)
5、其他类型
TIME,表示进程执行起到现在总的CPU占用时间
CMD,表示启动这个进程的命令,它其实就是一个启动进程的命令
ps -aux
%MEM表示内存占比
VSZ,如果一个程序完全驻留在内存中一共需要会用多少内存;
RSS,表示进程当前实际上占用了多少内存;
STAT,表示当前进程的状态,(S表示处于休眠状态,D表示不可终端的状态,Z表示僵尸进程,X表示死掉的进程);
因为三个进程都被挂起了所以是S,+表示在前台进程组
START,启动这个命令的时间点;
TIME,进程执行起到现在总的CPU占用时间;
COMMAND,表示启动这个进程的命令。
疑问:为什么用不同的命令查看进程,进程的同一个属性有时用不同的字符来表示