当我在后台执行 运行 bash 命令时 exec() 挂起

exec() hangs when I run bash command in background

我正在尝试 运行 我的服务器从 PHP 脚本作为后台进程,但它仍然挂起了 PHP 脚本。我这样称呼它:

$exec_result = exec('./myapp option1 option2 &> /dev/null &');

我尝试了 PHP hanging while exec() bash script 中的方法,例如添加 "set -m && " 或 "shopt -u checkjobs && ",但这没有帮助。我还尝试在 exec() 中调用我的 C++ 实用程序,它在后台执行 运行s 命令(基本上只是用“&”调用 std::system),但这也无济于事。使用 "nohup" 不会改变任何东西。此外,问题不在我的服务器中,因为当我调用 "sleep" 命令时发生同样的事情。

按预期在后台从 bash 运行 进程调用完全相同的命令。老实说,我很困惑和沮丧。我究竟做错了什么?也许 PHP 需要某种权限才能 运行 后台任务?我对 Linux 有点陌生。

如果重要的话,我都是从 Debian 10 和 PHP 7.3 开始的。

我已设法修复它,但我不知道为什么新解决方案有效而旧解决方案无效。也许它与 exec() build-it 解析器有关?两条线在 bash 中的工作方式相同,所以我将此归咎于 PHP。

所以,我已经替换了

$exec_result = exec('./myapp option1 option2 &> /dev/null &');

$exec_result = exec('./myapp option1 option2 > /dev/null 2>&1 &');

就是这样。我来回检查了很多次,第二行始终有效,而第一行每次都失败。