簡體   English   中英

為什么不 exec(“top”); 在 Linux 上工作?

[英]Why doesn't exec(“top”); work on Linux?

我試圖執行這個命令

echo exec("top");

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

兩者都不起作用(返回空白輸出)

有人知道為什么嗎?

因為 top 是一個交互式程序,旨在在終端上運行,而不是從腳本中執行。 您可能希望使用 arguments 運行“ps”命令,該命令將按 CPU 利用率對 output 進行排序。 http://www.devdaily.com/linux/unix-linux-process-memory-sort-ps-command-cpu

它可能有效,但exec()不返回任何內容。 閱讀手冊: exec()

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

但是您還有另一個問題: top不會自行退出。 你不能在這里使用它,因為你需要發送中斷信號(剛剛意識到: q也可以)。

一種解決方案是讓top在一次迭代后停止

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

你實際上可以調用 top 並回顯它的 output。 對我有用的代碼:

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

-b - 以批處理模式運行

-n 1 - 只有一次迭代

如果你想把它放在一個變量中:

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

我用了:

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

100% 減去空閑時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM