Have you considered putting a wait() into a SIGCHILD handler? I would expect the wait() to then only fire when a child has died, so it should return immediately.
(I have done the sort of thing you're asking about and I think that's how I avoided zombies, but I'm not currently able to access that source to verify my methods.)
Comment on Re: Zombie-less forking inside a daemon?