执行返回超过预期

Exec returning more than expected

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

我在脚本中有一个 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 或什么都没有,具体取决于进程是否 运行ning。但是,当 运行 使用 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

不过好像也没什么区别。任何人都可以告诉我为什么会发生这种情况以及可以采取什么措施来解决这个问题。

调用exec前需要清除$cpu。它将新输出附加到数组的末尾,但不会覆盖它。

您还可以去掉 greptrcut,并在 awk

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

!/awk/ 使其无法匹配 awk 行,因为该行包含 vlc.