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.