|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alexey Cheremisin 2:5020/400 16 Feb 2001 15:01:36 To : All Subject : Re: снова форк -------------------------------------------------------------------------------- Julia Fadeeva wrote: > Hello All. > > ситуация такая: > есть действие, выполняемое в фоновом режиме - юзеру надо пообщещать золотые > горы и для него все закончить. > Hаблюдаю странное, вот тестовый примерчик: > В perlipc вот что советуют: > > =========================== use POSIX 'setsid'; > > print "Заголовок<br>\n"; open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!"; > > $pid = fork(); die("Can not fork") if $pid < 0; > if ( $pid ) { print "Слегка подожите, потом проверьте емейл<br>\n"; > close(STDOUT); > exit(0); > } > setsid or die "Can't start a new session: $!"; open STDERR, '>&STDOUT' or die "Can't dup stdout: $!"; > > #то, что делается незаметно для юзера > #небольшой цикл, чтобы процесс поработал хотя бы с минуту > $i = 0; > while ($i <= 9999999) { > $i++; > } > > #отмылить юзеру результат > open(OUT,$MAILCOMMAND) || print "Error open sendmail pipe"; > ............... > close(OUT); > =========================== > > Когда выполняю в шелле - все в порядке, печатает: > =========== > Заголовок > Подождите и проверьте емейл > =========== > > и отваливается, потомок с минуту присутствует в списке процессов, потом > исчезает (у нас система зомбей сразу стреляет). > > Если вызываю из браузера, картина другая: > печатает заголовок и просьбу подождать, потом пауза (примерной длительности > работы остальной части скрипта), и потом опять печатает заголовок и просьбу. > > Почему такое бывает? Чем вызов из шелла в даннном случае отличается от вызова > через браузер? > > Julia --- ifmail v.2.15dev5 * Origin: MTU-Intel ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/770771a622ed.html, оценка из 5, голосов 10
|