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


Автор: zedik38 6.9.2014, 08:00
Подскажите пож-та, 
если 2 сигнала надо обрабатывать определенным образом каждый, а все  остальные одинаково, то на 1й своя подпрограмма, на 2ой своя, а вот обработку всех остальных как-либо можно объединить не перечисляя каждый?

Автор: tzirechnoy 6.9.2014, 09:38
Вы про какие сигнал? Если про unix/posix -- то мысль одинаково обрабатывать SIGILL/SIGCONT/SIGALRM мне кажэтся несколько эклектичной. Хотя, в perldoc perlvar показан вполне очевидный способ сделать это простым перечислением списка "всех остальных".

А если про какие-то другие -- то Вы не написали, про что Вы вообще.

Автор: Pfailed 6.9.2014, 20:57
Так, вроде, нельзя. Но с помощью IPC::Signal можно получить список сигналов актуальных для данной системы. Соответственно будет что-то такое
Код

#!/usr/bin/perl

use strict;
use IPC::Signal;

IPC::Signal::sig_translate_setup();
use Data::Dumper;

for my $sig (@IPC::Signal::Sig_name) {
    next if $sig eq 'HUP' || $sig eq 'INT';
    
    $SIG{$sig} = sub {
        warn "$sig catched";
        exit;
    };
}

$SIG{INT} = sub {
    warn "SIGINT";
};

$SIG{HUP} = sub {
    warn "SIGHUP";
};

warn $$;

sleep while 1;


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