|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Max 2:5020/400 28 Oct 2000 21:24:03 To : All Subject : Re: Сомнения... -------------------------------------------------------------------------------- А лучше использовать не wait, а waitpid. Когда сын дохнет, то мы его вычищаем. my $pid1; if ($pid1=fork()) {# родительский процесс $SIG{CHLD} = sub { my $q; #print "CHLD $pid1!\n"; for ($q=0;$q<$proc_num;$q++) # $proc_num - количество прцессов { POSIX::waitpid( -1, &POSIX::WNOHANG ); } }; ######### somethhing code ######## } else { # ребенок ### something code# } "Andrey Brindeew" <abr@mccinet.ru> wrote in message news:8tbadk$2an4$1@ddt.demos.su... > Hello! > > Стандартная ситуация: CGI-скрипт форкается, родитель говорит броузеру > "Bye-bye!", а предварительно отсоединившийся дитенок продолжает работу, > потом дохнет. Hо на днях меня админ разочаровал: по его словам в результате > некоторых ошибок ядро может выбросить дитенка в зомби, а т.к. за ним никто > не следит, то данный PID так и будет висеть в таблице процессов. Проясните > пожалуйста ситуацию! > > Вот используемый мной код: > > if (my $pid = fork) { > print "Content-Type: text/plain\n\nProcessing..."; > } > else { > die "Can't fork: $!" unless defined $pid; > > # Detaching child from parent process > open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; > open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!"; > setsid or die "Can't start a new session: $!"; > open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; > > # Some stuff > exit 0; > } > > Еще у админа проскочила хорошая идея, но вот додумать ее я не могу > самостоятельно: > Имеется два демона, постоянно висящих в памяти (основной и бэкапный). > Запустившийся ЦГИ-скрипт просит у демона "дай мне дитенка из такого-то > класса, вот тебе параметры для конструктора, и пусть он работает". Демон > делает процесс и следит за ним, как только он подохнет, он чистит зомби. > Второй демон нужен на случай прибития первого админом (они равноправны): он > автоматом поднимает первый и попутно обрабатывает запросы. Все IPC, думаю, > будет производится через Unix domain sockets. Ваши идеи? > > -- > WBR, Andrey Brindeew > http://www.dportal.ru > http://www.sat.com.ru > --- ifmail v.2.15dev5 * Origin: Rostelecom/Internet Centre (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/34950662d7eb.html, оценка из 5, голосов 10
|