perl多个sig处理程序指向一个子例程

时间:2013-04-05 16:14:47

标签: linux perl unix signals

我是perl的新手,并尝试在我的脚本中添加功能以捕获键盘中断和术语信号(如果抛出),然后发出操作系统命令来处理。在没有抛出信号并且脚本执行成功的情况下,还需要发出相同的OS命令和sub(注意END块)。据我所知,从研究和测试中,你必须为每个信号注册一个信号处理程序。在每种情况下,他们需要触发相同的子。这可能在一个$ SIG中完成,还是我必须同时注册两个,每个信号一个?这是我的代码。

sub issueKdestroy{
    system("kdestroy -q");
    exit(1);
}
$SIG{INT} = (\&issueKdestroy);
$SIG{TERM} = (\&issueKdestroy);
END{
    issueKdestroy();
}

从测试开始,这不起作用:

$SIG{'INT', 'TERM'} = (\&issueKdestroy);

在上面的代码中,它不会识别INT或TERM。 建议?

1 个答案:

答案 0 :(得分:2)

$SIG{'INT', 'TERM'}不是你的意思;要为这两个键分配值,请使用哈希切片(并提供两个值):

@SIG{'INT', 'TERM'} = (\&issueKdestroy, \&issueKdestroy);

使用$代替,您正在调用perl4样式的多维数组模拟,该模拟允许指定多个键,但将它们全部存储在一个哈希中,相当于:

$SIG{ join $;, 'INT', 'TERM' }

默认情况下$;chr(0x1c)