LINUX.ORG.RU

Обработка сигналов в PERL


0

0

Как мне в perl программе обрабатывать все сигналы.
Пусть хотя бы на уровне записи в лог.
Например если случился SIGSEGV то писать в лог и корректно выходить! 

Было-бы неплохо для начала изучить язык, на котором собрался писать.
Это сэкономит время тебе самому а людям в форуме не придется в сотый
раз читать дурацкие вопросы.

Итак, песдуй в магазин за книгами:

Программирование на Perl (3-е издание)
Уолл, Кристиансен, Орвант
ISBN 5-93286-020-0
(в оригинале - Programming Perl (знаменитая Camel Book))

Perl. Сборник рецептов. Для профессионалов. 2-е издание
Кристиансен Т., Торкингтон Н.
ISBN 5-94723-855-1
(в оригинале - Perl Cookbook)

Эти книги теперь есть на русском и недорого (хотя местами перевод
оставляет желать лучшего).

Ну и конечно - в комплекте с Perl идет здоровенный комплект
документации, если жаба душит - можно попробоавть обойтись ею.
Начни с 'man perl' или 'perldoc perl' - это оглавление документации.

Удачи.

P.S. Да, а конкретно по твоему вопросу читай:
perldoc perlvar # ищи %SIG
perldoc perlipc # самая первая глава - про сигналы

anonymous
()

вот как киллинт(ctrl+c) обрабатывать:

#!/usr/bin/perl -w
                                                                                                                                     
$SIG{INT} = \&prog;
                                                                                                                                     
sub prog {
  $SIG{INT} = \&prog;
  my $signame = shift;
  die "перывание по Ctrl+c SIG $signame";
}
                                                                                                                                     
while (<STDIN>){
  print "$_ ";
}
                                                                                                                                     

вот как ALRM (ожидание по таймауту) обрабатывать(программа, реализующая функции будильника):

#!/usr/bin/perl -w
                                                                                                                                     
use strict;
                                                                                                                                     
$SIG{ALRM}= sub{die "timeout"};
                                                                                                                                     
eval{
  alarm(5); # можно спать 5 секунд, или поставить число 7200 = 2 часа.
  while (1){
    sleep 1;
    print "sleeping... ";
  }
};
                                                                                                                                     
if($@ and $@=~/timeout/){
  print "music \n";
  qx[play vstavaj.mp3];
  qx[play vstavaj.mp3];
  qx[play vstavaj.mp3];
  qx[play vstavaj.mp3];
  qx[play vstavaj.mp3];
}

p.s. сначала перл изучи, потом за сигналы берись.
p.p.s. perldoc perlipc

vilfred ☆☆
()
Ответ на: комментарий от vilfred

песейц, чтобы написать что-то на "езыке" теперь нужно знать туеву хучу пиременных определённых самим "изыком", еще и выслушать подъебки от инциклапедистоф бис абразаванея.

блин, человек знает как работают сигналы и что с ними делать. спросил, как в "пёрдле" именуемом громко "ЯП" сделать обработчик. тут как тут два педораза, наверняка не с каждым сигналом могущих справиться тычут "<хитровыйбаный>ман в прикладуху, нехрен тут"

lb
()
Ответ на: комментарий от lb

> песейц, чтобы написать что-то на "езыке" теперь нужно знать туеву
> хучу пиременных определённых самим "изыком"
>

Эти пирименныи - принадлежнасть синтаксиса езыка.
Канешна нада изучать езык, чтобы на нем разгаваривать
или песать праграмы.


> блин, человек знает как работают сигналы и что с ними делать.
> спросил, как в "пёрдле" именуемом громко "ЯП" сделать обработчик.
>

Ты наверна уебан, да? Если чилавек знает как работают сигналы он
знаит про man pages тоже и для ниво это ни праблеиа.

> тут как тут два педораза, наверняка не с каждым сигналом могущих
>справиться тычут "<хитровыйбаный>ман в прикладуху, нехрен тут"

Не ты точна уебан. Какая прикладуха? Таво перца тыкали в докуминтацыю
па езыку. Не ты точна уебан.

anonymous
()
Ответ на: комментарий от lb

Ну, потому что сигналы это сложно, это не шелловские команды типа kill -HUP тыр-пыр. Потому что ты подразумеваешь перехват сигнала, а это значит, что вызов подпрограммы. Чтобы был сигнал надежно перехвачен, нужно еще раз в подпрограмме вызвать перехват сигнала. Вобщем, не так просто все там. Относительно того, все ли сигналы перехвачены - не все умею, да и юзаю только два сигнала, но проги, которые эти сигналы используют - писались не так просто. И потом, не везде есть кроссплатформенность. Т.е. неясно. В любом случае - тут недостаточно знания сигналов как таковых.

vilfred ☆☆
()
Ответ на: комментарий от vilfred

respect. ответ на 5 баллов.

PS. подколки намечались как раз на счет надежности, обработчика и переносимости.

lb
()

sigsegv нельзя перехватить!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.