【发布时间】:2012-10-26 11:05:11
【问题描述】:
我有一些用 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。但是如果这个进程崩溃了,主进程也会默默退出。
是否可以防止这种行为并使整个系统更加健壮?
【问题讨论】: