你所不知道的Linux进程状态码
2018-12-05 本文已影响20人
liamu
微信公众号:不惑小年轻
关注可了解更多的学习资料与编程技巧。问题或建议,请公众号留言;
如果你觉得我的文章对你有帮助,欢迎赞赏[^1]
查看进程状态常用工具
- ps
$ ps aux
root 4009 0.0 0.0 4376 1008 pts/0 Ss+ 05:51 0:00 /app
root 4287 0.6 0.4 37280 33660 pts/0 D+ 05:54 0:00 /app
root 4288 0.6 0.4 37280 33668 pts/0 D+ 05:54 0:00 /app
root 455 0.0 0.7 39956 7312 ? Ssl 11月26 0:00 /usr/sbin/lig
root 446 0.0 0.0 0 0 ? S< 11月26 0:00 [kworker/2:1H
- top
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28961 root 20 0 43816 3148 4040 R 3.2 0.0 0:00.01 top
620 root 20 0 37280 33676 908 D 0.3 0.4 0:00.01 app
1 root 20 0 160072 9416 6752 S 0.0 0.1 0:37.64 systemd
1896 root 20 0 0 0 0 Z 0.0 0.0 0:00.00 devapp
2 root 20 0 0 0 0 S 0.0 0.0 0:00.10 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:06.37 ksoftirqd/0
进程状态说明
状态 | 说明 |
---|---|
R | Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行 |
D | Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断 |
Z | Zombie的缩写,它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等) |
S | Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发生时,它会被唤醒并进入 R 状态 |
I | Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。前面说了,硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。要注意,D 状态的进程会导致平均负载升高, I 状态的进程却不会 |
T或者t | Stopped 或 Traced 的缩写,表示进程处于暂停或者跟踪状态。向一个进程发送 SIGSTOP 信号,它就会因响应这个信号变成暂停状态(Stopped);再向它发送 SIGCONT 信号,进程又会恢复运行(如果进程是终端里直接启动的,则需要你用 fg 命令,恢复到前台运行)。而当你用调试器(如 gdb)调试一个进程时,在使用断点中断进程后,进程就会变成跟踪状态,这其实也是一种特殊的暂停状态,只不过你可以用调试器来跟踪并按需要控制进程的运行 |
X | Dead 的缩写,表示进程已经消亡 |
s | 表示这个进程是一个会话的领导进程 |
+ | 表示前台进程组 |
< | 优先级较高的进程 |
l | 以线程的方式运行 |
进程组:表示一组相互关联的进程,比如每个子进程都是父进程所在组的成员;
会 话:指共享同一个控制终端的一个或多个进程组
我们通过 SSH 登录服务器,就会打开一个控制终端(TTY),这个控制终端就对应一个会话。而我们在终端中运行的命令以及它们的子进程,就构成了一个个的进程组,其中,在后台运行的命令,构成后台进程组;在前台运行的命令,构成前台进程组。
为什么要知道这么多呢
熟悉了几个必备的进程状态可以帮助我们快速定位服务器问题,使得系统一直处于高效的运行状态。
- 不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。这时,你就得注意下,系统或硬件发生了故障
- 僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态我们通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。大量的僵尸进程会用尽 PID 进程号,导致新进程不能创建,所以这种情况一定要避免。
下面的是我的公众号二维码图片,欢迎关注。

最后的有个好消息要告诉大家,
有大额红包可以领了!
打开支付宝,首页搜“517052075”,就能领到几块到几十块不等的大额大额红包,线上购物或者到线下使用支付宝付款,可以直接抵扣现金。