Почему не exec ("top"); работать в Linux?

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

echo exec("top"); 

а также

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

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

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

Solutions Collecting From Web of "Почему не exec ("top"); работать в Linux?"

Поскольку top – это интерактивная программа, предназначенная для запуска на терминале, не должна выполняться из сценария. Вероятно, вы хотите запустить команду «ps» с аргументами, которые будут сортировать выходные данные при использовании процессора. 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 и эхо его вывод. Код, который работал для меня:

 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% минус время простоя.