Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > fork & kill


Автор: zzzzzzzzzzzzzzzzzzz 25.9.2009, 16:42
Ситуация такая: есть процесс, который порождает другие процессы посредством fork. Для проверки того, живы ли еще дочерние процессы использую kill 0, $pid. Первый вопрос - правилен ли такой подход?

Дочерние процессы периодически умирают. Однако kill, $pid продолжает возвращать 1. Второй вопрос - почему так? 
Если вызвать эту инструкцию из другого процесса, она возвращает 0 только тогда, когда остановлен родительский процесс. 

Сильно не пинайте, в перле новичок.

Автор: ginnie 25.9.2009, 17:18
zzzzzzzzzzzzzzzzzzz, о завершении дочернего процесса родительский узнает посредством сигнала CHLD. Пример использования есть в perldoc perlipc.

Автор: zzzzzzzzzzzzzzzzzzz 25.9.2009, 22:57
спасибо, будем искать  smile 

Автор: gcc 26.9.2009, 02:49
Код

waitpid $child, 0; 

?

Автор: sir_nuf_nuf 26.9.2009, 11:46
Код

kill $pid, 0;

по моему такая конструкция "проверяет возможность отправки сигнала", не факт что это как-то связано с существованием процесса. И еще может работать по разному в разных операционках.

Используйте wait и waitpid

Автор: Pfailed 26.9.2009, 16:54
Цитата(zzzzzzzzzzzzzzzzzzz @  25.9.2009,  16:42 Найти цитируемый пост)
живы ли еще дочерние процессы

Если ваши дочерние процессы не живы, то они стали зомби потому как вы не обрабатываете сигнал CHLD (как уже говорили выше с помощью waitpid). Видимо с этим и связан различный результат kill(0, $pid) из родительского и внешних процессов.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)