我在网上发现了很多关于在后台运行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'命令清楚地找到它
答案 0 :(得分:0)
不要只是在最后添加&
,而是尝试添加>& /dev/null &
这是我取得成功的原因。所以最终会得到这样的结果:
$PID = shell_exec("nohup php teste.php >& /dev/null &");