Что $ SIG {'ALRM'} делает в Perl - PullRequest
       36

Что $ SIG {'ALRM'} делает в Perl

0 голосов
/ 11 октября 2018

Я действительно новичок в сценариях оболочки и Perl и пытаюсь преобразовать сценарий Perl в Python сценарий.

Я наткнулся на приведенный ниже фрагмент кода, который я не совсем понял.

sub sigalrm_handler
{
  printf (STDOUT "Timeout: Timeout Error Occured.\n");
  kill (1, $proc);
  exit (1);
}

sub main
{
  ...
  ...
    $SIG{'ALRM'} = \&sigalrm_handler;
    alarm ($ARGV[0]);
    shift @ARGV;

    $proc = spawn (@ARGV);
    wait;
    exit ($?);
  ...
  ...
}
main ()

Что собирается делать эта команда $SIG{'ALRM'}?Это какое-то специальное ключевое слово в Python.

Я видел много источников, где используется $SIGALRM, но не нашел источника, где они упоминали, почему он используется, как $SIGALRM, только почемуне другое имя.

Что это значение $SIG{'ALRM'} будет после этого назначения?

Может кто-нибудь помочь мне понять этот код?

1 Ответ

0 голосов
/ 11 октября 2018

Хэш %SIG устанавливает обработчики сигналов для сигналов Unix.Обработчики сигналов будут вызываться, когда ядро ​​отправляет сигнал процессу Perl.

Функция alarm дает ядру команду отправить сигнал через n секунд.Затем будет вызван обработчик $SIG{ALRM} и он сделает свое дело.

В вашем конкретном случае обработчик сигнала напечатает Timeout: Timeout Error Occured., уничтожит PID, сохраненный в $proc, и затем выйдет из программы.

Эквивалентом Python может быть сигнал или сигнал для Python 3.

...