PHP 实现守护进程
守护进程 守护进程作为一种常驻进程服务,很常见,例如 PHP-FPM, NGINX,REDIS,都需要一个父进程来支持整个服务。但是用 PHP 编写守护进程不多见,今天就来用 PHP 来实现一下。 步骤 ● fork 子进程 ● 父进程退出 ● 设置新的会话 ● 重置文件掩码 ● 关闭标准输入输出 实现 我们对着以上的步骤来实现,在这之前需要 pcntl 和 posix 扩展,请确保安装了。 function daemon() { $pid = pcntl_fork(); // fork 失败 if ($pid < 0) { exit('fork failed'); } else if ($pid > 0) { // 退出父进程 exit(0); } // 设置新的会员 // setsid 有几个注意点 // 不能是进程组的组长调用 // 对于进程组组员调用会产生新的会话和进程组,并成为该进程组的唯一成员,调用的进程将脱离终端 if (posix_setsid() < 0) { exit('set sid failed'); } // 重置文件掩码 umask(0); // 切换工作目录 chdir('/'); // 关闭标准输入输出 fclose(STDIN); fclose(STDOUT); fclose(STDERR); } 细节 // 获取进程ID var_dump