代码之家  ›  专栏  ›  技术社区  ›  Anil Vishnoi

我可以为Perl中的所有信号设置一个信号处理程序吗?

  •  7
  • Anil Vishnoi  · 技术社区  · 15 年前

    在Perl中,是否可以为它接收的所有信号只安装一个信号处理程序?这背后的原因是,我不知道Perl代码在运行时会得到什么信号。我可以看到的一种方法是将所有可用的信号指向我的自定义信号处理程序,但我不想这样做。有什么简单的方法吗?比如:

    $SIG{'ALL'} = 'sigHandler';
    
    3 回复  |  直到 15 年前
        1
  •  12
  •   Ether    15 年前

    你呢 真正地 我不想这么做。只为需要以不同于默认值的方式处理的信号安装信号处理程序(这一点我们帮不了您,因为您没有提到您正在编写什么样的应用程序)。

    在大多数正常情况下,您根本不必编写信号处理程序——默认设置就是为了完成您需要的任务。你应该读书 perldoc perlipc 马上 所以你知道你有什么不同于正常的情况。

    您可以使用一次修改多个信号 sigtrap pragma

    # install a trivial handler for all signals, as a learning tool
    use sigtrap 'handler' => \&my_handler, 'signal';
    sub my_handler
    {
        print "Caught signal $_[0]!\n";
    }
    
        2
  •  6
  •   mob    15 年前
    $SIG{$_} = 'sigHandler' for keys %SIG;
    

    如果你想治疗 __WARN__ __DIE__ 不同的是,

    use Config;
    $SIG{$_} = 'sigHandler' for split ' ', $Config{sig_name};
    
        3
  •  3
  •   Daenyth    15 年前

    从我的头顶上,

    foreach my $key (keys %SIG) {
        $SIG{$key} = \&sighandler
    }