вот например банальный листинг программы-примера
работы с fork###############################################################
my $pid = fork(); # 'разветвить' текущий процесс
# fork вернет 0 в потомке и PID потомка в процессе-предке
die "fork не отработал: $!" unless defined $pid;
unless ($pid) { # процесс-потомок
print "Начался потомок PID $$\n";
for (1..3) {
print "Потомок PID $$ работает $_\n";
sleep 2; # 'заснуть' на 2 секунды
}
print "Закончился потомок PID $$\n";
exit;
}
if ($pid) { # процесс-предок
print "Начался предок PID $$\n";
for (1..3) {
print "Предок PID $$ работает $_\n";
sleep 100;
}
# возможно, здесь нужно ждать завершения потомка:
# print "Предок PID $$ ждет завершения $pid\n";
# waitpid $pid, 0;
print "Закончился предок PID $$\n";
}
###############################################################Допустим у нас это записано в файлик test.pl
Если запустить ps, то получим следующую картину.
/usr/bin/perl ./test.pl
[test.pl] <defunct>Соответственно, если бы мы создавали 3 потомка было бы
[test.pl] <defunct> - 3 штуки.Как избавиться от этого ?
Дочерний Процесс завершился. Завершился нормально ...
Ни памяти, ни проц. времени не занимает.
Но всё-таки раздражает!
Кроме того, данный процесс явно отжирает файловый дескриптор.
http://www.google.ru/search?hl=ru&q=perl+fork+avoid+zombie
При смерти потомка родителю приходит сигнал CHLD - нужно его обработать.
Раскомментируйте строчки с waitpid