Это мой код, внутри index.php
(просто пример):
$pid = pcntl_fork(); if ($pid == -1) { die("failed to fork"); } else if ($pid) { // nothing to do } else { putDataIntoWebService(); exit(); } echo "normal page content";
Этот фрагмент отлично работает в командной строке. В Apache exit()
убивает их обоих, родительский и детский процесс. Что такое обходной путь?
Вы не можете использовать функции pcntl_*
с версией PHP модуля Apache. Цитата из комментария в документации pcntl_fork
:
Невозможно использовать функцию «pcntl_fork», когда PHP используется как модуль Apache. Вы можете использовать pcntl_fork только в режиме CGI или из командной строки.
Использование этой функции приведет к: «Неустранимая ошибка: вызов неопределенной функции: pcntl_fork ()»
Это решение:
posix_kill(getmypid(), SIGKILL);
вместо exit()
.