my $waitedpid = 0; my %dbh_pool = (); sub REAPER { $waitedpid = waitpid(-1,WNOHANG); $SIG{CHLD} = \&REAPER; if (defined $waitedpid && $dbh_pool{$waitedpid}{"Active"}) { $dbh_pool{$waitedpid}->disconnect; delete $dbh_pool{$waitedpid}; } } $SIG{CHLD} = \&REAPER;