The solution under unix would be to hook $SIG{CHLD} and reap them properly, a la perlipc. Unfortunately signals don't work properly under windows, so I'm not sure how you should handle this. Perhaps hack something up which involves waitpid -1, &WNOHANG; when the number of simultaneous children get high. You may also want to consider running under Cygwin.