当您运行top
并查看所有正在运行的进程时,我一直想知道一切的真正含义。例如,正在运行的进程的所有各种单字母状态代码(R = Running,S = Sleeping,等等...)
我在哪里可以找到这个?
当您运行top
并查看所有正在运行的进程时,我一直想知道一切的真正含义。例如,正在运行的进程的所有各种单字母状态代码(R = Running,S = Sleeping,等等...)
我在哪里可以找到这个?
手册页说明了状态代码映射到什么,但没有说明它们的实际含义。从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”是进程死亡的状态(它已经完成了执行),唯一剩下的就是在内核上描述它的结构。它正在等待其父进程检索其退出代码,仅此而已。在它的父进程用完它后,它就会消失。
您可以使用以下命令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
程序喜欢top
并ps
从内核本身获取这些值。您可以在此处的源代码中找到它的定义:
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