我在网上找到了很多关于在后台运行 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'可以清楚的找到它
最佳答案
不要只在末尾添加 &
尝试添加 >&/dev/null &
这就是我取得的成功。所以最终会得到这样的结果:
$PID = shell_exec("nohup php teste.php >& /dev/null &");
关于PHP shell_exec 不在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067916/