对于网站,我需要能够启动和停止守护进程。我目前正在做的是
exec("sudo /etc/init.d/daemonToStart start");
守护进程已启动,但 Apache/PHP 挂起。执行 ps aux
显示 sudo
本身变成了僵尸进程,有效地杀死了所有进一步的进程。这是尝试从 PHP 启动守护进程时的正常行为吗?
是的,Apache 有权执行 /etc/init.d/daemonToStart
命令。我更改了/etc/sudoers 文件以允许它这样做。不,我没有让 Apache 能够执行任何类型的命令,只有少数允许网站运行的命令。
无论如何,回到我的问题,有没有办法让 PHP 以不创建僵尸进程的方式启动守护进程?我问这个是因为当我做相反的事情时,停止一个已经启动的守护进程,工作得很好。
最佳答案
尝试将 >/dev/null 2>&1 &
附加到命令。
所以这样:
exec("sudo /etc/init.d/daemonToStart > /dev/null 2>&1 &");
以防万一你想知道它的作用/原因:
>/dev/null
- 将 STDOUT 重定向到/dev/null(换句话说,黑洞)2>&1
- 将 STDERR 重定向到 STDOUT(也黑洞)&
分离进程并在后台运行
关于php - 从 PHP 启动守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387077/