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

时间:2020-05-13 14:32:40

标签: php exec

我正在尝试从PHP脚本运行服务器作为后台进程,但是无论如何它都挂起了PHP脚本。我这样称呼它:

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

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

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

如果重要的话,我正在Debian 10和PHP 7.3中完成所有工作。

1 个答案:

答案 0 :(得分:0)

我已经设法修复了它,但是我不知道为什么新的解决方案能工作而旧的解决方案却不能工作。也许与exec()构建解析器有关?这两行在bash中的工作方式相同,因此我将PHP归咎于此。

所以,我替换了

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

使用

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

就做到了。我已经来回检查了多次,第二行始终如一,而第一行每次都失败。