我有一些用PHP编写的Linux守护程序来执行后台任务。
其中有一个“主”进程,有时会通过pcntl_fork
创建工作进程并对它们进行控制。
以下是(非常简单的)代码:
private function SpawnWorker($realm, $parallelismKey)
{
$pid = pcntl_fork();
if ($pid)
{
$worker = DaemonInstance::Create($pid, $realm, $parallelismKey);
$worker->Store();
$this->workers[$pid] = $worker;
return $worker;
}
else if ($pid == 0) // we're in child process now
return Daemon::REINCARNATE;
else
xechonl("#red#UNABLE TO SPAWN A WORKER ($realm, $parallelismKey)");
return false;
}
新的工作进程在返回“转生”值后调用posix_setsid
,并返回一个新的会话 ID。但是,如果该进程崩溃,主进程也会静默退出。
有没有可能防止这种行为,使整个系统更加健壮?