Nemůžete to ovládat signálem; pouze jeho nadřazený proces to může ovládat voláním waitpid()
nebo nastavení obslužných rutin signálu pro SIGCHLD
. Viz SIGCHLD
a SA_NOCLDWAIT
v sigaction(2)
manuálovou stránku pro podrobnosti.
Také to, co se stane s podřízenými vlákny, závisí na verzi linuxového jádra. S vlákny POSIX 2.6 by zabití hlavního vlákna mělo způsobit, že ostatní vlákna budou čistě ukončena. S 2.4 LinuxThreads je každé vlákno vlastně samostatný proces a SIGKILL
nedává kořenovému vláknu šanci říct ostatním, aby se vypnuli, zatímco SIGTERM
ano.
Pokud zabijete kořenový proces (rodičovský proces), měli by se stát osiřelé děti, nikoli zombie děti. sirotčí děti se vytvoří, když zabijete rodiče procesu, a jádro udělá z init rodiče sirotků. init by měl počkat, dokud sirotek nezemře, a poté použít funkci wait k vyčištění.
Zombie děti jsou vytvořeny, když proces (nikoli jeho rodič) skončí a jeho rodič nepřevezme jeho výstupní stav z tabulky procesů.
Zní mi to, jako byste se báli opustit sirotky, protože podle definice, když zabijete rodičovský proces zombie, zemře samotné zombie dítě.
Chcete-li zabít své sirotky, použijte kill -9 , což je ekvivalent SIGKILL.
Zde je podrobnější návod pro zabíjení věcí na linuxu:http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/