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

问题描述 投票:0回答:1

我想用PHP脚本作为后台进程运行我的服务器,但它还是挂了PHP脚本。我是这样叫的。

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

我试了一下 PHP在exec()时挂起的bash脚本。 比如添加 "set -m && "或 "shopt -u checkjobs &&",但这并没有帮助。我还试着在exec()中调用我的C++实用程序,它可以在后台运行命令(基本上只是用"& "调用std::system),但也没有用。使用 "nohup "也没有任何改变。另外,问题不在我的服务器上,因为当我调用 "sleep "命令时,同样的事情也会发生。

从bash中调用完全相同的命令,也会像预期的那样在后台运行进程。老实说,我很困惑和沮丧。我到底做错了什么?也许PHP需要某种权限来运行后台任务?我是个Linux新手。

我是在 Debian 10 和 PHP 7.3 上做的,如果这很重要的话。

php exec
1个回答
0
投票

我已经设法解决了这个问题,但我不知道为什么新的解决方案可行,而旧的解决方案却不行。也许这和exec() build-it解析器有关?这两行代码在bash中的工作原理是一样的,所以我将此归咎于PHP。

所以,我把

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

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

就这样做了。我来来回回检查了好多次,第二条线一直能用,而第一条线每次都失败。

© www.soinside.com 2019 - 2024. All rights reserved.