所以,我有这个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