in reply to fork() and defunct children

First of all,
# Wait for the MySQL server to become responsive. my $tries = 0; while ( !$dbh->ping && $tries++ < $opts{w} ) { sleep(1);

I'd print some debug messages before the sleep() call. If they don't show up, it means the ping never returns. In that case I'd set up a local $SIG{ALRM} = \&report_fail and drag the flow out of the $dbh->ping, printing as much informative message I can get from the current scope, DBI or the system all that runs on.

If that fails to give me a clue, I'd go on with wiretapping (e.g. wireshark), then tracing/trussing the involved processes.

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}