尝试使用信号事件处理程序输出数据不起作用

时间:2012-03-20 17:34:48

标签: perl signals

我正在尝试从我正在处理的脚本中获取一些调试输出。由于某种原因,下面的代码不会输出任何内容:

$SIG{'HUP'} = \&dump_state;

sub dump_state {        
    print "dumping state: \n\n";
    debug(Dumper($state));  
}

我也尝试过使用INT和TERM信号,但是没有输出。什么可能导致这种情况发生?我不知所措。

我也忘了提到“debug()”是应用程序中的一个小子,它只是用一些颜色编码打印到STDERR。众所周知,它可以在脚本中的其他任何位置工作。

1 个答案:

答案 0 :(得分:0)

我认为您只是尝试使用错误的信号名称。

http://docstore.mik.ua/orelly/perl/cookbook/ch16_19.htm

捕获CTRL-C是信号INT而不是HUP。

此代码有效:

use strict;
use warnings;

local $SIG{'INT'} = \&dump_state;

my $i=0;
while(1){
    $i++;
    sleep(5);
}

sub dump_state {        
    print "dumping state: $i\n\n";

}
./hup_test.pl
dumping state: 1

dumping state: 2

dumping state: 3

dumping state: 4

dumping state: 5

Killed