【问题标题】:PHP shel_exec not run in backgroundPHP shell_exec 不在后台运行
【发布时间】:2016-03-17 17:39:04
【问题描述】:

我在网上找到了很多关于后台运行php代码的内容,但我无法在我的机器中重新创建场景。 这是我的代码:

//call.php
function run_background()
{
    $PID = shell_exec("nohup php teste.php &");
    return $PID;
}

function checking_process($pid)
{
    exec("ps $pid", $state);
    return (count($state) >= 2);
}

$ps = run_background();
copy("yel", "temp/yel2");

当你运行 call.php 文件时,页面正在加载,直到 test.php 文件运行。这是用于测试的文件:

//test.php
for($i=1; $i<=5; $i++)
{
    sleep(1);
}
copy("yel", "temp/yel");

在这两个文件中,我使用复制功能来测试执行操作的时间。在这一点上,我希望作为这个背景中的文件 test.php 并且至少需要 5 秒,call.php 文件的流程应该独立发生,但 'yel2' 文件仅在 'yel' 文件之后创建。 但是,该功能实际上并没有在后台运行,这是错误的吗?

注意:我使用的是 Manjaro Linux 64 位、PHP 5.5 和 Apache 2.4

注意2:run_background函数返回的$PID是有效的,我可以用'ps aux'命令清楚地找到它

【问题讨论】:

    标签: php linux shell task


    【解决方案1】:

    不要在最后添加&amp;,而是尝试添加&gt;&amp; /dev/null &amp;,这就是我成功的方法。所以最终会是这样的:

    $PID = shell_exec("nohup php teste.php >& /dev/null &");
    

    【讨论】:

    • 哦,它有效。我已经看到了一些添加“dev/null”的例子,但不是这样。我还发现阻止代码正常工作的是字符数组。在这个例子中,我在互联网上找到了“nohup teste.php 2> /dev/null & echo $!”,只需将“2>”更改为“>2”,代码就可以正常运行,我认为这会影响一些东西并表明我研究了更多的shell脚本。无论哪种方式都非常感谢你,我找到了一个更清晰明确的答案
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2020-02-12
    • 2018-12-13
    • 2015-05-26
    相关资源
    最近更新 更多