# HG changeset patch # User Heiko Schlittermann # Date 1233165423 -3600 # Node ID b3cf6e84d2c6151e7e777d1aced93c0572ff04f3 # Parent d63acb8bbdbdf5ed10a1ef61d0d8b76ceafb7824 No zombies anymore. diff -r d63acb8bbdbd -r b3cf6e84d2c6 hlog --- a/hlog Tue Jan 27 23:47:51 2009 +0100 +++ b/hlog Wed Jan 28 18:57:03 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; @@ -58,8 +59,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() @@ -72,6 +82,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;