为啥不 exec("top");在 Linux 上工作?

Posted

技术标签:

【中文标题】为啥不 exec("top");在 Linux 上工作?【英文标题】:Why doesn't exec("top"); work on Linux?为什么不 exec("top");在 Linux 上工作? 【发布时间】:2011-10-02 23:20:00 【问题描述】:

我试图执行这个命令

echo exec("top");

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

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

有人知道为什么吗?

【问题讨论】:

验证顶部是否已安装。 exec() 可能在您的主机上被禁用。 @hexa:我正在使用 VPS,这个可以工作phpcode.eu/exec/index2.php @iLLin:我每天都在使用它 @KingCrunch:你看我之前的评论了吗?我每天都使用它 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

-b - 以批处理模式运行

-n 1 - 只有一次迭代

【讨论】:

以前的答案都对我有用,但 passthru 可以。不错。【参考方案3】:

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

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

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

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

$output = null;
exec('top -n 1', $output);
var_dump($output);

【讨论】:

我从没说过-l 1。我自己用-n 1试了一下,效果很好 看这里phpcode.eu/exec/index2.php - 它怎么可能与经典的 echo exec() 一起工作; ? $output = null; exec('top -n 1', $output); print_r($输出); //这里有什么问题? 没有任何进一步的信息,我无法告诉任何其他信息,然后“在这里工作正常”。也许您需要将路径调整为top 或类似的东西(因为可能没有设置$PATH 或类似的东西)。就这样。真的:几乎每个答案都只有“不起作用”并不能鼓励我进一步思考。【参考方案4】:

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

ob_start();
passthru('/usr/bin/top -b -n 1');
$output = ob_get_clean();
ob_clean();

【讨论】:

【参考方案5】:

我用过:

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

100% 减去空闲时间。

【讨论】:

以上是关于为啥不 exec("top");在 Linux 上工作?的主要内容,如果未能解决你的问题,请参考以下文章

CSS盒子的定位,我这样设置了,盒子为啥不动

为啥我在VS里面设计的时候设置了margin-top的DIV显示正常,但是预览的时候margin-top就无效了

在火狐和ie 浏览器下,使用js的滚轮事件设置元素的top值,元素为啥会出现震动的效果,求大神帮忙。感谢

linux下exec函数不返回结果

<audio>标签为啥IE 不兼容

为啥WPF里面的PasswordBox的Password属性不是依赖属性?