Проблема: есть некий трудоёмкий процесс в скрипте 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, но рабочих примеров найти не смог.
Решение: объявим, что нам собственно всё равно что происходит с «детьми»:
Решение: перевел memcached в режим debug и увидиел, что не может создать папку /var/run/memcached.socket (premission denied). Для того чтобы мог сам создавать, в /etc/memcached.conf добавил возможность запуска сервиса из под root: