Почему не исполняется ("top");работать на Linux? - PullRequest
3 голосов
/ 11 июля 2011

Я пытался выполнить эту команду

echo exec("top");

и

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

ни работает (возвращает пустой вывод)

кто-нибудь знает почему?

Ответы [ 5 ]

8 голосов
/ 11 июля 2011

Поскольку top - это интерактивная программа, предназначенная для запуска на терминале, а не для запуска из скрипта.Вы, вероятно, захотите запустить команду 'ps' с аргументами, которые будут сортировать вывод при использовании процессора.http://www.devdaily.com/linux/unix-linux-process-memory-sort-ps-command-cpu

6 голосов
/ 30 марта 2012

Вы можете вызвать top и отобразить его вывод. Код, который работал для меня:

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

-b - работает в пакетном режиме

-n 1 - только одна итерация

6 голосов
/ 11 июля 2011

Возможно, это работает, но exec() ничего не возвращает.Прочтите руководство: exec()

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

Но у вас есть другая проблема: top не выходит сам по себе.Вы не можете использовать его здесь, потому что вам нужно послать сигнал прерывания (только что понял: q тоже нормально).

Одно из решений - заставить top остановиться послеодна итерация

$output = null;
exec('top -n 1', $output);
var_dump($output);
3 голосов
/ 24 июня 2013

Если вы хотите поместить его в переменную:

ob_start();
passthru('/usr/bin/top -b -n 1');
$output = ob_get_clean();
ob_clean();
0 голосов
/ 02 августа 2016

Я использовал:

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

100% минус время простоя.

...