in reply to exec creating zombie processes
What happens if you use kill -9, $CHILD (negative number)? This should kill the whole process group (process + children). See also Signals in perlipc. Not sure if that works with OS X though...