in reply to Reaping Zombies (dont wanna wait)

What you probably want to do is set up a signal handler for $SIG{CHLD} which uses wait() to clean up the child. Since it's in the CHLD signal handler, it will only get called when a process has already finished, and so it won't really have to wait. Here's some sample code:
#!/usr/bin/perl $SIG{CHLD}=sub { wait(); print "Child exited\n";}; $| = 1; while(1) { if ((my $f = fork()) == 0) { # Child sleep(1); exit(0); } else { print "Started child $f\n"; } sleep(2); }