Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > как вывести сообщение и подолжить работу скрипта ?


Автор: aleksnn 29.9.2005, 21:04

GET http://script.cgi

Код

#!/usr/bin/perl
#script.cgi

print "start";

sleep 100;
exit;



как вывеси в ответ start и не ждать sleep ?

после форка родитель должен вывести страницу,а потомок работать

Автор: BlackLFL 29.9.2005, 21:25
перефразируйте вопрос, не понятно куда вывести ответ...
какую страницу должен вывести родитель?

Автор: aleksnn 29.9.2005, 23:11
1 делаем запрос страницы браузером.
родитель
{
2 в ответ получаю фразу "скрипт начал работу".
3 закрывается коннект.
}
потомок
4 скрипт продолжает работу.
5 результат скрипта в файл.



Автор: Kiber_rat 30.9.2005, 03:28
Попробуй написать
Код

print "start\n"

Похоже что со sleep есть маленький баг (а может фича) если небело перевода строки, то print срабатывает после sleep.

Автор: aleksnn 30.9.2005, 04:10
Тут sleep приводился в качестве времени работы. Тоесть страница ждёт выполнения всего скрипта.А мне нужно было закрыть сокет сразу после принта и до sleepa.Ответ вроде нашёл - делать close всем , но STDERR мне нужен и как его взять незнаю.

Автор: BlackLFL 30.9.2005, 08:35
Код

#!/usr/bin/perl -w
use strict;

print "Content-type: text/plain\n\n";
print "Демон запущен...\n";

require 'sys/syscall.ph';
fork() && exit;

close STDOUT;
close STDERR;
close STDIN;

syscall(&SYS_setsid);

$SIG{'INT'} = $SIG{'QUIT'} = $SIG{'TERM'} = 'quit';
$SIG{'HUP'} = 'ignore';

sub quit {
exit(0);
}


my @ARG;
my @result=`script.pl @ARG` or die $? . $!;
....


В дополнение читаем http://xpoint.ru/forums/programming/perl/misc/faq.xhtml#17

Автор: aleksnn 30.9.2005, 22:47
Ещё вопрос.
Поясните остаётся ли что то после exit в таблице процессов.
И что делает SYS_setsid я понимаю новую сессию а зачем это.

Автор: BlackLFL 1.10.2005, 09:14
По ссылки, которую я дал, есть ответ
Цитата

# Создаем новую сессию и становимся лидером
# группы процессов, чтоб нас случайно не прибили
syscall(&SYS_setsid);


Цитата

Поясните остаётся ли что то после exit в таблице процессов.

после какого именно exit? после fork появляеться новый процесс.

Автор: aleksnn 1.10.2005, 21:43
Вот и спрашиваю кто и почему может прибить.

sub quit {
# Помещаем сюда код для корректного
# прекращения работы
...
exit(0);
}
после exit(0); может остатся зомби ?

Автор: BlackLFL 3.10.2005, 18:24
это делается,что бы Вы стали лидером,а не считались зомби от родителя (родитель же умирает).

после exit(0) вроде не должно остаться зомби,я к сожалению не особо в этой области силет еще...

Автор: aleksnn 4.10.2005, 11:02
Возможно пригодится.
Нашёл в ActiveState прекрастный пример работы fork.
C:\Perl\eg\fork\forker.pl

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)