【问题标题】:Why shell_exec executing more than 1 process?为什么 shell_exec 执行超过 1 个进程?
【发布时间】:2011-07-07 16:37:45
【问题描述】:

当我从浏览器运行一次run.php 时,我不明白为什么会有多个进程

在 PHP 代码中,我有以下内容:

run.php

<?php
shell_exec("php theprocess.php > /dev/null 2>&1 &");
?>

进程.php

<?php
$z = 1;
while ($z <= 20) {
    echo $z . "\n";
    $z++;
    sleep(3);
}
?>

我从浏览器执行run.php(例如:http://localhost/run.php

然后我输入:ps aux | grep php

username@ [~]# ps aux | grep php
username 27272  0.0  1.5  89504 64468 ?        R    17:33   0:00 php theprocess.php
username 27274  0.0  1.2  89504 49872 ?        R    17:33   0:00 php theprocess.php
username 27276  0.0  0.6  89504 28676 ?        R    17:33   0:00 php theprocess.php
username 27278  0.0  0.0  22280  3704 ?        R    17:33   0:00 php theprocess.php
username 27280  0.0  0.0   1940   508 ?        S+   17:33   0:00 grep php

我不明白为什么它显示超过 1 个 theprocess.php 进程?

还有为什么它还在后台运行?它应该终止theprocess.php 完成任务。怎么可能?

【问题讨论】:

  • 您已将theprocess.php 与最后的&amp; 放在后台。如果它坐在那里等待输入,它将永远等待。
  • 啊,好吧,现在我不明白了,也许在脚本的末尾我可以包含“kill -9 PID”......但我不明白为什么当我执行一次时显示超过 1 个进程。
  • 您在测试时刷新了多少次页面?每次都会启动一个新的进程...
  • Marc B,我在测试时没有刷新页面。
  • 奇怪,当我在 shell 中输入 'php run.php' - 它显示一个进程在后台运行...但是从浏览器运行正在执行多个 php run.php hmmmm

标签: linux shell php shell-exec


【解决方案1】:

我已经解决了这个问题!

从网页运行脚本时,它不会被视为 PHP cli。

替换

shell_exec("/usr/bin/php theprocess.php > /dev/null 2>&1 &");

shell_exec("/usr/bin/php-cli theprocess.php > /dev/null 2>&1 &");

我不再有多个进程在后台运行。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 1970-01-01
    • 2021-05-08
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多