PHP在exec()bash脚本时挂起

sli*_*537 5 php linux bash shell

我有一些看起来像这样的代码行...

exec($this->path.' start > /dev/null 2>&1 &');
return ['status' => 'Command executed'];
Run Code Online (Sandbox Code Playgroud)

$this->path是一个Shell脚本,start是该Shell脚本的一个参数,我相信该行的其余部分应该转储任何响应,以便php脚本可以继续运行。它无法正常运行,php成功启动了shell脚本(将启动游戏服务器),但是php一直挂起,直到我使用shell关闭服务器为止。当我使用外壳关闭服务器时,它完成了执行,并且收到了“命令已执行”响应。我还禁用了SELinux的执行,以确保它不会造成干扰。

运行Linux-Fedora 21和内置的PHP开发服务器。

Hal*_*nis 0

我在生产环境中解决了同样的问题,如下:

pclose(popen($this->path.' start > /dev/null 2>&1 &', 'r'));
Run Code Online (Sandbox Code Playgroud)

所以,诀窍是启动服务器,然后关闭进程文件指针

希望有帮助:)