Vous ne pouvez pas contrôler cela par signal; seul son processus parent peut contrôler cela, en appelant waitpid()
ou définir des gestionnaires de signaux pour SIGCHLD
. Voir SIGCHLD
et SA_NOCLDWAIT
dans le sigaction(2)
page de manuel pour plus de détails.
De plus, ce qui arrive aux threads enfants dépend de la version du noyau Linux. Avec les threads POSIX de la version 2.6, la suppression du thread principal devrait entraîner la fermeture propre des autres threads. Avec 2.4 LinuxThreads, chaque thread est en fait un processus séparé et SIGKILL
ne donne pas au thread racine une chance de dire aux autres de se fermer, alors que SIGTERM
fait.
Si vous tuez le processus racine (processus parent), cela devrait créer des enfants orphelins et non des enfants zombies. les enfants orphelins sont créés lorsque vous tuez le parent d'un processus, et le noyau fait de init le parent des orphelins. init est censé attendre que l'orphelin meure, puis utilisez wait pour le nettoyer.
Les enfants zombies sont créés lorsqu'un processus (pas son parent) se termine et que son parent ne prend pas son statut de sortie de la table de processus.
Il me semble que vous craignez de laisser des orphelins car, par définition, lorsque vous tuez un processus parent zombie, l'enfant zombie lui-même meurt.
Pour tuer vos orphelins, utilisez kill -9 , qui est l'équivalent de SIGKILL.
Voici un tutoriel plus approfondi pour tuer des trucs sur Linux :http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/