2014-11-24 165 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); 
}