一、进程的状态
程序执行时,即是一个进程。在Linux中,有父进程和子进程的概念,子进程继承父进程的安全性身份、文件描述符和端口资源特权等 ,子进程在执行时,父进程通常处于睡眠状态,当子进程执行完毕,父进程会被唤醒。
通常来说,程序的状态及其变化图可以用下图来表示,其中黄色小球中的字母代表的就是程序的状态简写。
R:进程处于Running或者可Running的状态
T:进程处于Stopped的状态
Z:进程处于僵尸状态,这种状态为程序exit之后,等待父进程回收的状态。进程exit退出后,进程占用的内存和其他资源会被回收,同时在操作系统的process table中依旧保留一条记录(存储PID, termination status, resource usage information),此时进程的状态是zombie / defunct的 。父进程会使用waitpid系统调用,回收处于zombie状态的子进程,回收后进程的信息才会从process table去除
S:进程正在等待某一条件实现的状态,此时可以被打断
D:不会响应信号的睡眠状态,仅在进程中断会导致意外的情况下进入
K:只可以响应彻底退出信号
I:等同于D
X:彻底释放的状态,通常看不到
二、进程状态的查看
进程状态的查看使用ps命令,其语法十分简单,如下所示:
最常用选项主要包括
1. 使用ps -ef列出全部进程及其详细信息:
- 列出所有进程:
- 列出全格式
2.使用ps aux列出全部进程及其详细信息
简而言之,ps -ef是system v的风格,ps aux则是bsd风格的
三、进程的控制与监控
1.kill命令
kill命令是使用信号对进程进行控制,主要是停止进程,其使用的语法主要如下所示
SYNOPSIS
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
kill -l [signal]
一般来说,直接使用:kill -[number] [PID]的形式,其中不同的数字具有不同的代表意义:
1:HangUP,终端断线
2:类似于键盘输入ctrl+c以中断进程,该信号可以被程序自定义处理,也即可以被程序忽略不执行,通常使用于程序初始化
9:强制终止,不管处于什么状态,强制执行
15:普通终止,等程序安排好之后自身的任务后执行终止
18:继续执行已暂停的进程
19:暂停程序,类似于ctrl+z
2.top命令
使用top命令可以实时监控进程状态,其对应会显示基本情况包括
- 常规使用技巧:
按1:查看单个cpu的具体使用信息
按M:按照内存使用信息排序进程
按f:选择需要显示的进程信息项目,自定义显示进程信息
- 负载情况计算
负载计算需要根据cpu数量来,先执行lscpu查看cpu数量,例子图片中为4
top命令查看平均负载量分别为 0.19、0.20、0.18,即可计算出平均单个cpu负载在平均1、5、15分钟内分别为0.19/4=0.0475,0.05,0.045,这个数据要跟1去做比较,可简单理解为cpu负载在4.75%,5%,4.5%