4

我试图执行这个命令

echo exec("top");

echo exec("/usr/bin/top");

两者都不起作用(返回空白输出)

有人知道为什么吗?

4

5 回答 5

8

因为 top 是一个交互式程序,旨在在终端上运行,而不是从脚本中执行。您可能希望使用参数运行“ps”命令,该参数将按 cpu 利用率对输出进行排序。 http://www.devdaily.com/linux/unix-linux-process-memory-sort-ps-command-cpu

于 2011-07-11T16:52:24.030 回答
7

您实际上可以调用 top 并回显其输出。对我有用的代码:

passthru('/usr/bin/top -b -n 1');

-b - 以批处理模式运行

-n 1 - 只有一次迭代

于 2012-03-30T08:45:52.470 回答
6

它可能有效,但exec()不返回任何内容。阅读手册:exec()

$output = null;
exec('top', $output);
echo $output;

但是您还有另一个问题:top不会自行退出。你不能在这里使用它,因为你需要发送中断信号(刚刚意识到:q也可以)。

一种解决方案是top在一次迭代后停止

$output = null;
exec('top -n 1', $output);
var_dump($output);
于 2011-07-11T16:50:39.540 回答
3

如果你想把它放在一个变量中:

ob_start();
passthru('/usr/bin/top -b -n 1');
$output = ob_get_clean();
ob_clean();
于 2013-06-24T03:09:07.190 回答
0

我用了:

$cpu = preg_split('/[\s]+/', shell_exec('mpstat 1 1'));
$cpu = 100-$cpu[42];

100% 减去空闲时间。

于 2016-08-02T20:43:34.900 回答