PHP shel_exec不能在后台运行

时间:2016-03-17 17:39:04

标签: php linux shell task

我在网上发现了很多关于在后台运行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'命令清楚地找到它

1 个答案:

答案 0 :(得分:0)

不要只是在最后添加&,而是尝试添加>& /dev/null &这是我取得成功的原因。所以最终会得到这样的结果:

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