Non puoi controllarlo tramite segnale; solo il suo processo genitore può controllarlo, chiamando waitpid()
o impostando i gestori di segnale per SIGCHLD
. Vedi SIGCHLD
e SA_NOCLDWAIT
nel sigaction(2)
manpage per i dettagli.
Inoltre, ciò che accade ai thread figlio dipende dalla versione del kernel Linux. Con i thread POSIX di 2.6, l'uccisione del thread principale dovrebbe causare l'uscita pulita degli altri thread. Con 2.4 LinuxThreads, ogni thread è in realtà un processo separato e SIGKILL
non dà al thread principale la possibilità di dire agli altri di chiudere, mentre SIGTERM
fa.
Se uccidi il processo root (processo genitore), questo dovrebbe rendere i bambini orfani, non i bambini zombi. I bambini orfani vengono creati quando uccidi il genitore di un processo e il kernel rende init il genitore degli orfani. init dovrebbe aspettare che orphan muoia, quindi usa wait per ripulirlo.
I figli zombie vengono creati quando un processo (non il suo genitore) termina e il suo genitore non riprende il suo stato di uscita dalla tabella dei processi.
Mi sembra che tu sia preoccupato di lasciare orfani perché per definizione, quando uccidi un processo genitore zombi, il bambino zombi stesso muore.
Per uccidere i tuoi orfani, usa kill -9 , che è l'equivalente SIGKILL.
Ecco un tutorial più approfondito per uccidere cose su Linux:http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/