为啥不 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 上工作?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在VS里面设计的时候设置了margin-top的DIV显示正常,但是预览的时候margin-top就无效了