Le comportement par défaut de SIGCHLD est de rejeter le signal, mais le processus enfant est conservé comme un zombie jusqu'à ce que le parent appelle wait() (ou une variante) pour obtenir son statut de résiliation.
Mais si vous appelez explicitement sigaction() avec la disposition SIG_IGN , cela l'empêche de transformer l'enfant en zombie - lorsque l'enfant sort, il est immédiatement récolté. Voir https://stackoverflow.com/a/7171836/1491895
La manière POSIX d'obtenir ce comportement est d'appeler sigaction avec handler = SIG_DFL et flags contenant SA_NOCLDWAIT . C'est sous Linux depuis la 2.6.