Плодятся зомби процессы defunct при вызове posix_kill

Проблема: есть некий трудоёмкий процесс в скрипте PHP, который вынесен из родительского потока.При завершении его, при помощи posix_kill, остается зомби процесс. Код вида:

                   $child_pid = pcntl_fork();
                   if (($child_pid==0) or ($child_pid==-1)){ // -1 если дочерний процесс стартовать не удалось

//здесь много грузящей процессор работы

                    PutLog(messageslogfile, BOn."--завершил дочерний процесс", true);    
                    if ($child_pid!=-1){ posix_kill(posix_getpid(), SIGKILL);}; // если продолжаем в основном потоке, то и кончаем его                    
                   } else {                       
                        PutLog(messageslogfile, BOn."--стартовал дочерний процесс", true);    
                   };                    

Проблема возникает из за того, что нам нужно как-то отчитаться в главный процесс, что дочерний процесс завершен, и только тогда ОС поймёт, что зомби можно убирать. Классически для этого используют pcntl_wait, но рабочих примеров найти не смог.

Решение: объявим, что нам собственно всё равно что происходит с «детьми»:

pcntl_signal(SIGCHLD, SIG_IGN);

После этого зомби-процессы плодиться перестают

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.