所以,我有這個PHP後臺工作人員監聽到IPC消息。 奇怪的是,父進程(從pcntl_fork結果)離開[PHP] <解散>進程,直到子進程完成,但只有當腳本啓動命令行形成一個cronjob,不直接。pcntl_fork()導致倒閉的父進程
我知道<解散>過程不是邪惡的,而是從一個cronjob運行時,我想不通爲什麼它只是發生。
命令
/path/to/php/binary/php /path/to/php/file/IpcServer.php
分岔代碼:
$iParent = posix_getpid();
$iChild = pcntl_fork();
if ($iChild == -1)
throw new Exception("Unable to fork into child process.");
elseif ($iChild)
{
echo "Forking into background [{$iChild}].\n";
Log::d('Killing parent process (' . $iParent. ').');
exit;
}
輸出
Forking into background [20835].
Killing parent process (20834).
ps aux | grep的PHP
root 20834 0.0 0.0 0 0 ? Zs 14:28 0:00 [php] <defunct>
root 20835 0.0 0.2 275620 8064 ? Ss 15:35 0:00 /path/to/php/binary/php /path/to/php/file/IpcServer.php
,我發現這是一個衆所周知的Apache錯誤,但隨後從運行的cronjob時,爲什麼會出現這樣的錯誤?
我有相同的問題,但是我跑我的PHP守護進程通過[Upstart](http://upstart.ubuntu.com/cookbook/)。我的申請分叉一次。通過Upstart啓動父進程成爲殭屍。通過CLI啓動 - 無父進程殭屍。 – user12345 2014-07-26 17:55:42