PHP shell_exec 不在后台运行

标签 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'可以清楚的找到它

最佳答案

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

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

关于PHP shell_exec 不在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36067916/

相关文章:

linux - 如何检查字符串是否包含特殊字符(!@#$%^&*()_+)

python - 通过 SSH 连接到服务器并退出 Python 脚本(在同一 shell 中)

shell - 命令提示符下远程服务器的输出

php - 给出警告 : mysqli_query() expects parameter 1 to be mysqli, null。当我尝试将数据库作为 OOP 对象连接时

php - PHP 或 MySQL 中的夹具生成器

php - 从表中获取数据插入到另一个数据库表中

linux - 区分ELF文件中的.shstrtab和.strtab

linux - Elasticsearch 系统服务失败

php - Symfony OutputFormatterStyle "blink"不闪烁

linux - 对于没有密码的 ssh,两种方式都是正确的