【问题标题】:Why is the result equal to 0 and sometimes 1 - shell_exec('pgrep -f为什么结果等于 0 有时等于 1 - shell_exec('pgrep -f
【发布时间】:2019-01-04 05:18:59
【问题描述】:

脚本:

$S = 'pgrep -f test.php | wc -l';
$U = trim(shell_exec($S));
echo $U;

为什么这个脚本的结果等于0,有时等于1

文件test.php 没有运行。

【问题讨论】:

  • 因为 grepping 也是一个新进程,所以需要从结果中过滤 grep 进程。使用 ps aux 你可以:ps aux | grep test.php | grep -v grep | wc -l
  • @AgniusVasiliauskas 这也适用于其他命令,将结果(无论它可能是什么)通过管道输送到grep -v pgrep 是一个否定,它表示:“所有除了通过指定的内容-v 标志”。

标签: php bash grep shell-exec


【解决方案1】:

问题是在执行命令pgrep -f test.php | wc -l 时,它有时会在结果中出现(取决于时间)。您可以根据a question on Linux & Unix SE 使用以下语法防止这种情况发生:

pgrep -f '[t]est.php' | wc -l

带括号的部分基本上是说“找到字母t后跟est.php”,如果文件正在运行就会找到,但不会匹配当前执行的命令,因为在t 后面跟一个括号[

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    相关资源
    最近更新 更多