# HG changeset patch # User Heiko Schlittermann # Date 1233165476 -3600 # Node ID 9166982f8b19b2b57f58dc0b55956ec05384758e # Parent 83dad3fbc95e96a1f7d94abad1827ba0e5ec4f1e# Parent b3cf6e84d2c6151e7e777d1aced93c0572ff04f3 [merged] (zombie killer) diff -r 83dad3fbc95e -r 9166982f8b19 hlog --- a/hlog Wed Jan 28 06:23:51 2009 +0100 +++ b/hlog Wed Jan 28 18:57:56 2009 +0100 @@ -23,6 +23,7 @@ use Getopt::Long; use IO::Socket::INET; use Pod::Usage; +use POSIX qw(:sys_wait_h); my $opt_addr = "0.0.0.0"; my $opt_port = 8080; @@ -60,8 +61,17 @@ ReuseAddr => 1, ) or die "Can't create listener socket: $!\n"; - warn "listener $opt_addr:$opt_port\n"; - while (my $client = $listener->accept) { + $SIG{CHLD} = sub { + while ((my $pid = waitpid(-1, WNOHANG)) > 0) { + print LOG localtime() . " child $pid died\n"; + } + }; + + warn "listener $$ $opt_addr:$opt_port\n"; + + while (1) { + my $client = $listener->accept; + next if not defined $client; # may be because of signal print LOG $_ = localtime() @@ -74,6 +84,7 @@ my $pid = fork(); die "Can't fork: $!\n" if not defined $pid; if ($pid == 0) { + $SIG{CHLD} = "DEFAULT"; $listener->close; handle_request($client); exit 0;