ps输出和top输出的区别?

Sou*_*kil 4 linux

我发现很难理解 ps 和 top 产生的输出?

这是 top 的输出:

PID    PSID USERNAME  TID  PRI NICE  SIZE  RES  STATE  TIME    CPU   COMMAND
26439 23712 soumyau  26439  15    0 7512M 5234M sleep 286:25  16.67% or_lse2 (18)
26523 23712 soumyau  26439  -2    0 7512M 5234M cpu9  143:10   8.33% or_lse2
26522 23712 soumyau  26439  -2    0 7512M 5234M cpu3  143:10   8.33% or_lse2
Run Code Online (Sandbox Code Playgroud)

这是由 ps ( ps -L -p 26439 -o pcpu,psr,pid,user,tid):

%CPU  PSR   PID   USER       TID
99.9   3   26439 soumyau    26522
99.9   9   26439 soumyau    26523
0.0    8   26439 soumyau    26439
Run Code Online (Sandbox Code Playgroud)

为什么两个结果有差异?

你能简单解释一下这两个 CPU% 的意义吗?

小智 6

ps 基于累积 CPU 使用率(自进程启动以来),其中 %CPU 是平均值(总/时间)。

top 报告自上次采样以来的(平均)CPU 使用率。

作为参考,请参阅此片段 man ps

CPU 使用率目前表示为在进程的整个生命周期内运行所花费的时间百分比。这并不理想,也不符合 ps 在其他方面符合的标准。CPU 使用率加起来不太可能正好是 100%。

并从 man top

自上次屏幕更新以来,任务在 CPU 时间中所占的份额,以总 CPU 时间的百分比表示。在真正的 SMP 环境中,如果“Irix 模式”关闭,top 将在“Solaris 模式”下运行,其中任务的 CPU 使用率将除以 CPU 总数。您可以使用“I”交互命令切换“Irix/Solaris”模式。