La forma habitual de cosechar los hijos de un proceso es instalar un manejador para la señal CHLD :
$SIG{CHLD} = sub { wait() }:
Este código funciona la mayor parte del tiempo.
Sin embargo cuando un proceso es parado (ha recibido una señal  STOP )
también se produce una señal CHLD. En tal caso el padre obtiene
la señal pero la señal no significa la finalización del 
proceso hijo. El padre ejecutará el wait y podría atascasrse si la señal de continuar no es enviada al hijo.
Otro problema surge del hecho de que Unix 
sólo entrega una señal CHLD si varios subprocesos
terminan al mismo tiempo. En este caso se produce la ''fuga'' de un zombi.
Una solución a estos problemas es la siguiente:
use POSIX qw(WNOHANG);
local $SIG{CHLD} = sub {
      while (my $kid = waitpid(-1, WNOHANG)) > 0) {}
    };
Si la señal CHLD fué consecuencia de una parada, el uso 
del modificador  WNOHANG  garantiza que no hay atasco.
El bucle asegura que todos los zombies serán cosechados.
En un buen número de plataformas Unix las señales
 CHLD  mantienen una conducta especial
con respecto al valor de  IGNORE .
Poner $SIG{CHLD} = 'IGNORE' tiene el efecto
de no crear un zombie. En tales plataformas la llamada
a  wait  retorna -1.
 
