62

当您运行top并查看所有正在运行的进程时,我一直想知道一切的真正含义。例如,正在运行的进程的所有各种单字母状态代码(R = Running,S = Sleeping,等等...)

我在哪里可以找到这个?

4

3 回答 3

130

手册页说明了状态代码映射到什么,但没有说明它们的实际含义。从top手册页:

'D' = uninterruptible sleep
'R' = running
'S' = sleeping
'T' = traced or stopped
'Z' = zombie

“R”是最简单的;该进程已准备好运行,并且将在轮到使用 CPU 时运行。

'S' 和 'D' 是两种睡眠状态,进程正在等待某些事情发生。不同之处在于“S”可以被信号中断,而“D”不能(通常在进程等待磁盘时看到)。

'T' 是进程停止的状态,通常通过SIGSTOPSIGTSTP。它也可以由调试器 ( ptrace) 停止。当您看到该状态时,通常是因为您使用Ctrl+Z将命令置于后台。

“Z”是进程死亡的状态(它已经完成了执行),唯一剩下的就是在内核上描述它的结构。它正在等待其父进程检索其退出代码,仅此而已。在它的父进程用完它后,它就会消失。

于 2008-11-21T01:26:37.117 回答
15

您可以使用以下命令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
于 2008-11-21T01:13:04.150 回答
5

程序喜欢topps从内核本身获取这些值。您可以在此处的源代码中找到它的定义:

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

于 2020-11-05T22:04:31.720 回答