进程的关系
三种特殊的进程:
- 僵尸进程:任务完成的子进程其代码执行部分已经结束执行了,系统的资源也基本归还给系统了,但其父进程没有做最后的收尾工作,导致进程的进程控制块(PCB)仍驻留在内存中,而它的 PCB 的存在代表这个进程还存在(因为 PCB 就是进程存在的唯一标志,里面有 PID 等消息),并没有消亡,这样的进程称之为僵尸进程(Zombie)
- 孤儿进程:如果父进程结束(非正常的结束),未能及时收回子进程,子进程仍在运行,这样的子进程称之为孤儿进程。在 Linux 系统中,孤儿进程一般会被 init 进程所“收养”,成为 init 的子进程,由 init 来做善后处理。
- 内核初始化进程:进程 0 是系统引导时创建的一个特殊进程,也称之为内核初始化,其最后一个动作就是创建出一个子进程运行 /sbin/init 可执行文件,该子进程就是 PID=1 的进程 1,而进程 0 就转为交换进程(也被称为空闲进程),进程 1 (init 进程)是第一个用户态的进程,再由它不断创建系统里其他的进程,所以它是所有用户态进程的父进程或者祖先进程。同时它是一个守护程序,直到计算机关机才会停止。
工作管理
前台:在终端中运行,能与你有交互的进程
后台:在终端中运行,但是你并不能与其任何的交互,也不能显示其执行的过程
如何讲一个进程放入后台运行:
例如:
ls &
我们还可以通过ctrl+z使我们的当前的前台工作停止并丢到后台中:
例如:
tail -f /var/log/dpkg.log
ctrl+z
我们可以通过fg命令将后台的工作拿到前台中来,
通过ctrl+z停止放到后台的工作,我们可以通过bg让其在后台运行
工作的常用的信号值:
信号值 | 作用 |
---|---|
-1 | 重新读取参数运行,类似restart |
-2 | 如同ctrl+c的操作推出 |
-9 | 强制终止该任务 |
-15 | 正常的方式终止该任务 |
进程查看工具
top
第一行:当前程序的名称,系统时间,系统已经启动多长时间,当前系统有几个用户,系统1分钟,5分钟,15分钟的负载情况
第二行:进程总数,正在运行的进程数,睡眠的进程数,停止的进程数,僵尸进程数
第三行:当前用户进程使用cpu的百分比,内核进程使用cpu的百分比,用户进程空间内改变过优先级的进程占用cpu的百分比,空闲cpu的百分比,等待输入输出的cpu时间百分比,硬中断占用cpu的百分比,软中断占用cpu的百分比,虚拟cpu等待实际cpu的时间百分比
第四行:物理内存总量,空闲内存总量,使用的物理内存总量,用作内核缓存的内存量
第五行:交换区总量,空闲交换区总量,使用的交换区总量,缓冲的交换区总量
以下表格中列对应的内容:
PID:进程ID
USER:该进程的所属用户
PR:进程执行的优先级(动态优先级)
NI:进程的nice值(静态优先级)
VIRT:进程任务使用的虚拟内存总数
RES:进程使用物理内存数
SHR:进程共享内存的大小
S:进程的状态(S=sleep,R=running,Z=zombie)
%CPU:进程cpu的利用率
%MEM:进程内存的利用率
TIME:进程活跃的总时间
COMMAND:进程运行的名字
ps工具
ps aux
USER:进程的拥有用户
PID:进程ID
%CPU:进程占用CPU的百分比
%MEM:进程占用内存的百分比
VSZ:进程使用虚拟内存大小
RSS:使用物理内存的大小
TTY:终端ID
STAT:进程状态
START:启动进程的时间
TIME:进程消耗CPU的时间
COMMAND:命令名称和参数
pstree
参数:
- -A:各程序树之间以ASCII字节来连接
- -p:同时列出每个进程的PID
- -u:同时列出每个进程的所有用户的名称
进程控制
进程的查找:
ps aux | grep nginx
进程的结束:
kill -9 [PID]