处于“可中断睡眠”状态的进程如何使用 100% CPU?

mah*_*ood 5 linux process

根据此参考,进程具有以下状态

R  running or runnable (on run queue)
D  uninterruptible sleep (usually IO)
S  interruptible sleep (waiting for an event to complete)
Z  defunct/zombie, terminated but not reaped by its parent
T  stopped, either by a job control signal or because it is being traced
Run Code Online (Sandbox Code Playgroud)

在睡眠状态下,预计进程不会消耗 CPU 时间,但是在下面的输出中,我看到一个进程正在使用 100% 的 CPU,同时它处于 S 状态。

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32643 root      20   0 13736 7748  472 R   98  0.0   2:59.30 bzip2
29504 satam     20   0 1063m 779m 3824 S  100  2.4   1242:54 stencil
31923 root      20   0 15092 1224  848 D   14  0.0   1:39.96 find
Run Code Online (Sandbox Code Playgroud)

这怎么可能,这意味着什么?

Pau*_*aul 1

“不间断睡眠”意味着进程正在等待 I/O(例如磁盘操作)。但是考虑到 CPU 正在运行该进程,即使它没有做任何工作,CPU 仍然“卡住”等待它完成 io,因此它可以继续做其他事情 - 安排另一个任务。因此,当进程处于 D 模式时,这会消耗 100% 的 CPU 周期。

因此它处于睡眠模式,即它不执行任何 CPU 工作,但不间断,这意味着 CPU 不能执行任何其他操作。

在多核系统中,其他核心可用于其他任务。