当我在后台执行 运行 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 &');
就是这样。我来回检查了很多次,第二行始终有效,而第一行每次都失败。
我正在尝试 运行 我的服务器从 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 &');
就是这样。我来回检查了很多次,第二行始终有效,而第一行每次都失败。