2014-11-24 256 views
0

我正試圖在SIGHUP上爲簡單的perl守護進程重新讀取配置文件。 我想處理信號後Perl進程崩潰

use sigtrap qw/handler rereadconf HUP/; 

但是隻能執行「rereadconf」程序過程停止 我也想

%SIG{HUP} = \&rereadconf; 
sub rereadconf{ 
.... mycode 
print "procedure executed\n"; 
}; 

,但結果是一樣的,執行過程程序停止之後。 那麼如何讓信號處理後的過程繼續執行?

+0

只要你退出處理程序恢復程序。如果它實際上是由信號引起的,而不是你在處理程序中做的事情,那麼最好猜測:你已經打斷了一個C程序庫調用,它不準備被中斷。它需要更好的錯誤處理。 – ikegami 2014-11-24 20:14:04

+0

它「停止」在哪裏? – ikegami 2014-11-24 20:16:39

+0

@ikegami是否可以因爲使用Socket?所以我需要處理錯誤? – 2014-11-24 20:26:20

回答

0

您的程序退出,因爲accept由於被信號中斷而返回false。你想

while (1) { 
    my $client = $srv->accept(); 
    if (!$client) { 
     next if $!{EINTR}; 
     die(sprintf(STDERR "[%s] accept: %s\n", basename($0), $!)); 
    } 

    print(STDERR "accepted new client\n"); 
    serve_client($client); 
}