在 PHP 中解析 linux "top"?

Parse linux "top" in PHP?

我正在 PHP 开发监控工具。它应该显示 PID 对单个进程的 % cpu 使用情况。请记住,我不能使用 ps,因为它将总使用量除以进程 运行 的时间。这就是平均使用情况。 php 文件是 运行.

时我需要使用

这是我正在尝试的,它似乎接近我在终端中需要的内容,但 php 不会打印任何内容。

$cmd = "top -n 1 -p 30100";
echo exec($cmd);

是否有其他更好的方法?如果实用程序提供我需要的功能,我可以安装它们。

TL;DR 我需要 PID 进程的 %cpu,尽可能简单以避免解析

知道没有瞬时CPU使用率这样的东西。这就像游戏中的 FPS:只有在询问特定时间间隔时才有意义。在任何特定时刻,进程的 CPU 用法只是 "yes" 或 "no"。没有百分比。

Could I somehow create a script that runs for one second, for example? And checks the usage in that second?

当然可以。如果你想自己做,你可以解析 /proc/<pid>/stat 并取出 utimestime 字段——分别是第 14 个和第 15 个整数。比如说,等一下,然后看看这些字段发生了多少变化。

有关此文件中字段的完整说明,请参阅 man proc

手册页说单位是时钟滴答,其中每秒的滴答数是可变的(C 函数 sysconf(_SC_CLK_TCK) 给出了数字)。在我(公认的有限)经验中,单位只是 1/100 秒。意思是将这些数字除以 100 得到秒数。

Could you please provide a snippet of how I would do that? I'm not that experienced. Here's how I imagine doing it, maybe a 10 cycle for() with a 100ms sleep, then calculate based on the ten values?

不需要取两个以上的样本。

top -n1 -p 30100 |grep -e 30100 | awk '{print }'