Sie können das nicht per Signal steuern; nur sein übergeordneter Prozess kann dies steuern, indem er waitpid()
aufruft oder Setzen von Signalhandlern für SIGCHLD
. Siehe SIGCHLD
und SA_NOCLDWAIT
im sigaction(2)
Manpage für Details.
Außerdem hängt es von der Linux-Kernel-Version ab, was mit untergeordneten Threads passiert. Bei den POSIX-Threads von 2.6 sollte das Beenden des Haupt-Threads dazu führen, dass die anderen Threads sauber beendet werden. Bei 2.4 LinuxThreads ist jeder Thread tatsächlich ein separater Prozess und SIGKILL
gibt dem Root-Thread keine Chance, den anderen zu sagen, dass sie herunterfahren sollen, während SIGTERM
tut.
Wenn Sie den Root-Prozess (Elternprozess) beenden, sollten verwaiste Kinder entstehen, keine Zombie-Kinder. verwaiste Kinder werden erstellt, wenn Sie den Elternprozess eines Prozesses beenden, und der Kernel macht init zum Elternteil von Waisenkindern. init soll warten, bis orphan stirbt, und dann wait verwenden, um es zu bereinigen.
Zombie-Kinder werden erstellt, wenn ein Prozess (nicht sein Elternteil) endet und sein Elternteil seinen Beendigungsstatus aus der Prozesstabelle nicht übernimmt.
Es klingt für mich so, als ob Sie sich Sorgen machen, Waisen zu hinterlassen, denn per Definition stirbt das Zombie-Kind selbst, wenn Sie einen Zombie-Elternprozess töten.
Um Ihre Waisenkinder zu töten, verwenden Sie kill -9 , was das Äquivalent von SIGKILL ist.
Hier ist ein ausführlicheres Tutorial zum Töten von Sachen unter Linux:http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/