как использовать pcntl fork() с Apache?


Это мой код, внутри 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() убивает их обоих, родительский и дочерний процесс. Что такое обходной путь?

Author: hakre, 2012-08-31

2 answers

Вы не можете использовать функции pcntl_* с версией PHP модуля Apache. Цитируя комментарий в pcntl_fork документация:

Невозможно использовать функцию 'pcntl_fork', когда PHP используется в качестве модуля Apache. Вы можете использовать pcntl_fork только в режиме CGI или из командной строки.

Использование этой функции приведет к: 'Фатальная ошибка: Вызов неопределенной функции: pcntl_fork()'

 5
Author: Hubro, 2012-08-31 11:52:53

Вот решение:

posix_kill(getmypid(), SIGKILL);

Вместо exit().

 1
Author: yegor256, 2012-09-05 08:38:24