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

后端 未结 5 1129
醉酒成梦
醉酒成梦 2020-12-21 09:54

I was trying to execute this command

echo exec(\"top\");

and

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

neither works

相关标签:
5条回答
  • 2020-12-21 10:01

    I used:

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

    100% minus the idle time.

    0 讨论(0)
  • 2020-12-21 10:04

    It probably works, but exec() doesn't return anything. Read the Manual: exec()

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

    But you have another problem: top doesn't exit by itself. You cannot use it here, because you need to send the interrupt-signal (just realized: q is ok too).

    One solution is to make top to stop after one iteration

    $output = null;
    exec('top -n 1', $output);
    var_dump($output);
    
    0 讨论(0)
  • 2020-12-21 10:17

    You actually can call top and echo its output. Code that worked for me:

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

    -b - running in batch mode

    -n 1 - only one iteration

    0 讨论(0)
  • 2020-12-21 10:19

    Because top is an interactive program that is meant to be run on a terminal, not be executed from a script. You are probably want to run the 'ps' command with arguments which will sort output by cpu utilization. http://www.devdaily.com/linux/unix-linux-process-memory-sort-ps-command-cpu

    0 讨论(0)
  • 2020-12-21 10:25

    If you want to put it in a variable :

    ob_start();
    passthru('/usr/bin/top -b -n 1');
    $output = ob_get_clean();
    ob_clean();
    
    0 讨论(0)
提交回复
热议问题