No zombies anymore.
--- 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;