在 Linux 中,“top”命令中的所有值是啥意思?
Posted
技术标签:
【中文标题】在 Linux 中,“top”命令中的所有值是啥意思?【英文标题】:In Linux, what do all the values in the "top" command mean?在 Linux 中,“top”命令中的所有值是什么意思? 【发布时间】:2010-09-23 09:04:28 【问题描述】:当您运行top
并查看所有正在运行的进程时,我一直想知道所有内容的实际含义。例如正在运行的进程的所有各种单字母状态代码(R = Running,S = Sleeping,等等...)
我在哪里可以找到这个?
【问题讨论】:
【参考方案1】:man page 表示状态代码映射到什么,但不是它们的实际含义。来自top
手册页:
'D' = uninterruptible sleep
'R' = running
'S' = sleeping
'T' = traced or stopped
'Z' = zombie
'R' 是最简单的;该进程已准备好运行,并且将在轮到使用 CPU 时运行。
'S' 和 'D' 是两种睡眠状态,进程正在等待某些事情发生。不同的是,'S'可以被信号中断,而'D'不能(通常在进程等待磁盘时看到)。
'T' 是进程停止的状态,通常通过SIGSTOP
或SIGTSTP
。它也可以由调试器 (ptrace
) 停止。当您看到该状态时,通常是因为您使用 Ctrl+ Z 将命令置于后台。
'Z' 是进程死亡的状态(它已经完成了执行),唯一剩下的就是在内核上描述它的结构。它正在等待其父进程检索其退出代码,仅此而已。其父进程用完后,它就会消失。
【讨论】:
这并没有说明导致S
状态的原因。相反,我知道磁盘活动会导致D
状态。
@A-B-B:那是因为有很多事情会导致S
状态。最常见的情况是进程正在等待事件和/或超时(select
/poll
/epoll
,从终端或网络阻止read
,以及许多其他情况)。
相关答案更详细:***.com/questions/223644/…
此答案是否有可用的现代更新?我看到状态代码为“I”的进程 - 手册页没有说明那是什么!
如果被调试器停止,状态不是t
,不是T
?【参考方案2】:
您可以使用命令man top
来查找状态:
D = uninterruptible sleep
I = idle
R = running
S = sleeping
T = stopped by job control signal
t = stopped by debugger during trace
Z = zombie
【讨论】:
嘿伙计!你偷了我的答案! RTFM 在这里不是一个有效的答案,因为仅凭手册不足以确定状态的真正含义。[~] # man top sh: man: command not found
我知道,我知道:man7.org/linux/man-pages/man1/top.1.html【参考方案3】:
像top
和ps
这样的程序从内核本身获取这些值。您可以在此处的源代码中找到它的定义:
https://github.com/torvalds/linux/blob/3950e975431bc914f7e81b8f2a2dbdf2064acb0f/fs/proc/array.c#L129-L143
static const char * const task_state_array[] =
/* states in TASK_REPORT: */
"R (running)", /* 0x00 */
"S (sleeping)", /* 0x01 */
"D (disk sleep)", /* 0x02 */
"T (stopped)", /* 0x04 */
"t (tracing stop)", /* 0x08 */
"X (dead)", /* 0x10 */
"Z (zombie)", /* 0x20 */
"P (parked)", /* 0x40 */
/* states beyond TASK_REPORT: */
"I (idle)", /* 0x80 */
;
有关更多信息,请参阅此问题:https://unix.stackexchange.com/q/462098/79648
【讨论】:
以上是关于在 Linux 中,“top”命令中的所有值是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章