|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrey Brindeew 2:5020/400 27 Oct 2000 11:23:02 To : All Subject : Сомнения... -------------------------------------------------------------------------------- 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: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/657751b719ad.html, оценка из 5, голосов 10
|