Я разветвляюсь с этим кодом:
echo "1. posix_getpid()=".posix_getpid().", posix_getppid()=".posix_getppid()."\n";
$pid = pcntl_fork();
var_dump($pid);
if ($pid == -1) die("could not fork");
if ($pid) {
//parent
echo "2. pid=".$pid.", posix_getpid()=".posix_getpid().", posix_getppid()=".posix_getppid()."\n";
} else {
//child
$sid = posix_setsid();
if ($sid < 0)
exit;
echo "3. pid=".$pid.", posix_getpid()=".posix_getpid().", posix_getppid()=".posix_getppid()."\n";
$fp = fopen("/tmp/testfile", "w");
fwrite($fp, '$data');
fclose($fp);
}
Почему-то иногда блок else отправляется в браузер, а иногда отображается блок if ($ pid).
То, что я пытаюсь достичь, это отправить какой-то ответ, а затем продолжить обработку после того, как соединение с клиентом будет закрыто.Затем, наконец, закройте после завершения обработки после запроса.Если я сплю в дочернем или родительском объекте, запрос зависает там.
Обе части выполняются, хотя, просто странно определять, какой из них отправляется в браузер.