|
|
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
|