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