$ SIG {'ALRM'}在Perl中做了什么

Anu*_*eep 1 shell perl signals process alarm

我是shell脚本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 ()
Run Code Online (Sandbox Code Playgroud)

这个$SIG{'ALRM'}命令要做什么?它是Python中的某种特殊关键字.

我已经看到很多来源$SIGALRM正在使用,但没有找到任何来源他们提到为什么它被使用$SIGALRM只是为什么不是其他名称.

$SIG{'ALRM'}在这项任务之后,这个价值会是什么?

任何人都可以帮我理解这段代码吗?

Cor*_*ion 6

所述%SIG散列设置信号处理程序用于Unix的信号.当内核向Perl进程发送信号时,将调用信号处理程序.

报警功能指示内核后发送信号ñ秒.$SIG{ALRM}然后将调用该处理程序并执行其操作.

在您的特定情况下,信号处理程序将打印Timeout: Timeout Error Occured.,杀死存储在其中的PID $proc然后退出程序.

Python等价物可能是Python 3的信号信号.

  • 此外,如果将程序从一种编程语言移植到另一种编程语言,最好至少知道其中一种编程语言.您似乎不知道Perl或Python,所以也许可以向您的同事寻求帮助. (2认同)