|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Artem Chuprina 2:5020/371.32 27 Oct 2000 14:23:31 To : abr@mccinet.ru Subject : Re: Сомнения... -------------------------------------------------------------------------------- amr> Стандартная ситуация: CGI-скрипт форкается, родитель говорит броузеру amr> "Bye-bye!", а предварительно отсоединившийся дитенок продолжает работу, amr> потом дохнет. Hо на днях меня админ разочаровал: по его словам в результате amr> некоторых ошибок ядро может выбросить дитенка в зомби, а т.к. за ним никто amr> не следит, то данный PID так и будет висеть в таблице процессов. Проясните amr> пожалуйста ситуацию! amr> Вот используемый мной код: amr> if (my $pid = fork) { amr> print "Content-Type: text/plain\n\nProcessing..."; amr> } amr> else { amr> die "Can't fork: $!" unless defined $pid; amr> # Detaching child from parent process amr> open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; amr> open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!"; amr> setsid or die "Can't start a new session: $!"; amr> open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; amr> # Some stuff amr> exit 0; amr> } Вообще, если я правильно ошибаюсь, помогает double fork - ты форкаешь ребенка и wait его. Он форкает ребенка и exit(0). Внук попадает в дети к init'у. А тот обязан чистить зомбей. -- Счастливо! Ран. --- ifmail v.2.14.os-p7-tma3 * Origin: MemoNet (2:5020/371.32@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/171216b5079be.html, оценка из 5, голосов 10
|