ps 输出和 top 输出之间的区别?

ps 输出和 top 输出之间的区别?

我发现很难理解 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

这是 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

为什么两个结果会有差异?

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

答案1

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

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

请参阅以下代码片段以供参考man ps

目前,CPU 使用率以进程整个生命周期中运行时间的百分比来表示。这并不理想,也不符合 ps 所遵循的标准。CPU 使用率不太可能精确达到 100%。

以及来自man top

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

答案2

区别实际上只在于它是否除以核心数。

基本上附言显示输出不除以核心数
,而是顶部可以以两种模式操作

[SHIFT]+[I]
切换到/从 Irix 模式
,或者你会看到与附言

答案3

“ps”命令按时间顺序显示所有进程。它拥有所有进程。它不关心进程状态(运行或休眠)。

“top”命令显示按最高顺序运行的进程。这就是您看到输出变化的原因。第一行中的某些进程在一段时间后会进入第二行或第三行,这取决于进程状态。

相关内容