fastcgi + pcntl_fork

Wicked

Новичок
fastcgi + pcntl_fork

Я недавно сталкивался с ситуацией, когда надо было каким-либо способом запускать пхпшный скрипт в фоне. На тот момент это делалось с помощью функции pcntl_fork, когда форкнутый процесс вызывал system("php script.php ..."), и в этом месте нашелся баг, что реально распараллеливания не происходило, и главный процесс ждал завершения форкнутого. Разбираться со всей этой бесовщиной на тот момент не было ни желания, ни возможности, поэтому я просто заменил форк + system(...) на system("php script.php ... &") и жить стало легче. Но это не главное :)

Тогда же я заметил, что при использовании fastcgi + pcntl_fork после тестов в памяти оставалось много зомбированных fastcgi процессов, и со временем сервер вообще переставал обрабатывать пхп-запросы. Правильно ли я понимаю, что когда мы форкаем fastcgi-ного воркера, он как бы теряет связь с веб-сервером (nginx'ом), но т.к. при этом каждый воркер создается для обработки энного количества fastcgi-запросов, то он не завершается после завершения скрипта, а продолжает висеть в памяти?
 

WP

^_^
php -q script.php > /dev/null &

-~{}~ 21.02.08 16:16:

Хотя форк будет и в PHP.
 

Wicked

Новичок
1) я ж написал, что так и сделал (сейчас выделил жирным) :)
2) зачем нужен -q для cli ?
3) что насчет главного вопроса: есть ли проблема при использовании fastcgi + pcntl_fork?
 

Alexandre

PHPПенсионер
есть ли проблема при использовании fastcgi + pcntl_fork?
fork не рекомендуется запускать вместе с WEBсервером
ранее это было указано в мане, нашел только это.
You have to compile the CGI or CLI version of PHP with --enable-pcntl configuration option when compiling PHP to enable Process Control support.
 

Wicked

Новичок
vovik
Спасибо, очень занимательно. Решил даже по порядку прочитать, а не только ответ на свой вопрос поискать.
 
Сверху