Зомби процессы при использовании popen()

  • Автор темы Михаил Филаткин
  • Дата начала

Михаил Филаткин

Guest
Зомби процессы при использовании popen()

Приветствую!
Есть несложный скрипт, запускаемый кроном, рассылающий почту. Почта рассылается по схеме :

$fd = popen("/usr/sbin/sendmail -t -oi", 'w');

fputs($fd, "To: $to\n");
fputs($fd, "From: $from\n");
...

pclose($fd);

Но возникла проблема - админ сервера сообщил, что скрипт порождает большое количество зомби. Так вот, не посоветует ли кто чего? В частности, не поможет ли добавление

define("SIGTERM",15);
posix_kill($fd,SIGTERM);

после pclose ?
 

whirlwind

TDD infected, paranoid
Зомби - это данные о дохлом процессе. Они остаются в таблице, что бы мейнстрим мог обработать код завершения потомка. Повесь обработчик на SIGCHLD и waitpid-ом вычищай дохлых потомков.
 

Михаил Филаткин

Guest
Я правильно понимаю, нужен еще один скрипт, так? Я судя по тому что php.net не знает о функции waitpid - не php-шный? Или вы о pcntl_waitpid?
 

whirlwind

TDD infected, paranoid
Нет скрипт не нужен. Сначала pcntl_signal(SIGCHLD,...), затем open, а в коллбеке pcntl_waitpid & WUNTRACED. Но лучше поподробнее почитать.
 

Михаил Филаткин

Guest
Спасибо за наводку :)
Пойду читать. Как-то оно все непросто оказалось.
 
Сверху