php - 从 PHP 启动守护进程

标签 php daemon zombie-process

对于网站,我需要能够启动和停止守护进程。我目前正在做的是

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/

相关文章:

javascript - PHP : How to emulate format json_encode to text which contain html

python - 如何让 python 守护进程在停止时执行操作

c++ - 是否可以使用 cygwin 编译 Windows 服务?

c - 僵尸进程无法被杀死

使用带有 waitpid pselect fork sigaction 的处理程序清理子进程

php - Kohana 查询生成器更新

php - 文件不加载 css

c - 僵尸进程在其父进程死亡后会去哪里?

PHP 图像转换

linux - Linux 中的 sleep 机制如何工作