Использование библиотеки pcntl в PHP - PullRequest
2 голосов
/ 26 февраля 2011

Я пытался использовать библиотеку pcntl, чтобы разветвить дочерний процесс в php.Вот простой фрагмент кода, который у меня есть:

  $pid = pcntl_fork();
  if ($pid != -1) {
    if ($pid) {
       print "In the parent: child PID is $pid\n";
       pcntl_waitpid($pid, $status);
       echo "Back in parent\n";
    } 
    else {
        print "In the child\n";
        exit(19);
    }
   } 
   else {
        echo "Fork failed!\n";
   }

Я получаю результат:

В дочернем элементе

, что означает, что родитель неничего не делать или, возможно, каким-то образом ребенок стер то, что сделал родитель (я не знаю почему ..)

Если я прокомментирую строку: pcntl_waitpid ($ pid, $ status); Я получаю следующий результат:

У родителя: PID ребенка - 11394 Назад у родителя

В этом случае ребенок ничего не делал .. Какэто может случиться?Я не понимаю, как это работает .. Кстати, я работаю над XAMPP.Может ли кто-нибудь дать мне некоторые идеи?

Большое спасибо!

1 Ответ

2 голосов
/ 28 февраля 2011

При запуске с последней версией PHP (5.3.5) ваш пример работает как опубликовано. Имейте в виду, что это с двоичной командой командной строки . Если вы используете PHP как модуль Apache , тогда вам не следует использовать функции pcntl.

Вывод, который я получил (pid будет другим для вас):

In the parent: child PID is 4759
In the child
Back in parent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...