いくつかのバックグラウンド作業を行うために PHP で書かれた Linux デーモンがいくつかあります。ワーカー プロセスを生成しpcntl_fork
て制御する「マスター」プロセスが 1 つあります。
これが(非常に簡単な)コードです:
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 が返されます。ただし、このプロセスがクラッシュすると、マスターも黙って終了します。
この動作を防ぎ、システム全体をより堅牢にすることは可能ですか?