我有一些用 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;
}
在以“reincarnate”值返回后,新的工作进程调用posix_setsid
,它返回一个新的会话 ID。但是如果这个进程崩溃了,主进程也会默默退出。
是否可以防止这种行为并使整个系统更加健壮?