Exec返回超过预期

时间:2015-07-31 09:15:21

标签: php linux exec

我有一个通过cron作业运行的php脚本。

我在脚本中有一个exec命令,如下所示:

exec("ps -u bob -o user:20,%cpu,cmd | awk 'NR>1' | grep vlc | tr -s ' ' | cut -d ' ' -f 2",$cpu,$return)

如果进程存在,这会使cpu形成由特定用户运行的进程。当通过命令行运行时,我会说21或根本不执行任何操作,具体取决于进程是否正在运行。但是,当运行vai PHP脚本时,我得到以下内容:

[0] => bob 0.0 /bin/sh -c php /home/bob/restart.php bob
[1] => bob 0.0 php /home/bob/restartStream.php bob
[2] => bob 0.0 sh -c ps -u bob -o user:20,%cpu,cmd | awk NR

它似乎返回了所有最近执行的命令,而不是执行命令的结果。

我看过一些帖子显示2>&1的使用,我相信它会重定向stdin和stdout或类似的东西。但是我在我的命令中尝试过这样:

ps -u bob -o user:20,%cpu,cmd | awk 'NR>1' | grep vlc | tr -s ' ' | cut -d ' ' -f 2 2>&1

但它似乎没有什么区别。可以给我任何指示,说明为什么会发生这种情况以及可以采取哪些措施来解决这个问题。

1 个答案:

答案 0 :(得分:1)

在致电$cpu之前,您需要清除exec。它将新输出附加到数组的末尾,它不会覆盖它。

您还可以摆脱greptrcut并对awk

中的输出进行所有处理
$cpu = array();
exec("ps -u bob -o user:20,%cpu,cmd | awk 'NR>1 && /vlc/ && !/awk/ {print $2}'",$cpu,$return);

!/awk/使其与awk行不匹配,因为它包含vlc