2012-03-20 105 views
0

我想從我正在處理的腳本獲取一些調試輸出。出於某種原因,下面的代碼不會輸出任何東西:試圖用信號事件處理程序輸出數據不起作用

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

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

我與INT和TERM信號,試圖以此爲好,但我沒有得到任何輸出。什麼可能導致這種情況發生?我很茫然。

我也忘了提及「debug()」是應用程序中的一個小子,它只是用一些顏色編碼打印到STDERR。在腳本中的其他地方工作是已知的。

+0

替換'debug'與'打印STDERR'以消除是一個問題。你什麼都得不到輸出,甚至沒有「傾銷國家」? '$ state'可能是空的,但即使這樣也會拋出一些東西。 – Schwern 2012-03-20 18:16:11

+0

愚蠢的問題:你發送SIGHUP的程序? – mob 2012-03-20 19:13:33

+0

您提供的程序不會因您所屬的問題而受到影響。 – ikegami 2012-03-20 20:00:31

回答

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