English 中文(简体)
在Linux系统中,"top"命令中的所有数值都代表什么意义?
原标题:
  • 时间:2008-11-21 01:11:22
  •  标签:

当您运行top并查看所有正在运行的进程时,我一直想知道一切实际意义。例如,运行进程的所有各种单字母状态代码(R = 运行中,S = 睡眠等等…)

我可以在哪里找到这个?

最佳回答

这个man页列出了状态码的映射关系,但没有解释它们具体意义。来自top man页:

 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是一个无法再执行的状态(它已经完成了它的执行),唯一剩下的就是描述它的内核结构。它在等待它的父进程检索它的退出代码,没有其他事情要做。在其父进程完成它之后,它将消失。

问题回答

您可以使用命令 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

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





相关问题
热门标签