#!/usr/bin/perl -w use strict; my $nd = NDTest->new; $nd->Bind; warn "My PID is $$\n"; foreach my $i (1..10) { if (!fork()) { # Child sleep(1); exit($i); } sleep(2); } package NDTest; sub new { my $class = shift; my $self = {}; $self->{mode} = 'fork'; bless $self,$class; } sub SigChildHandler { my $self = shift; my $ref = shift; return undef if $self->{'mode'} ne 'fork'; # Don't care for childs. # return 'IGNORE' if $^O eq 'linux'; # We get zombies on Linux otherwise my $reaper; $reaper = sub { warn "Running reaper.\n"; $$ref = wait; $SIG{'CHLD'} = $reaper; }; } sub Bind ($) { my $self = shift; my $fh; my $child_pid; my $reaper = $self->SigChildHandler(\$child_pid); $SIG{'CHLD'} = $reaper if $reaper; }