Prozess und dessen Kind-Prozesse beenden
Mit Hilfe von pslist können alle Kind-Prozesse eines Prozesses angezeigt werden und allenfalls ein Signal an alle diese Prozesse gesendet werden. Im FreeBSD-Portbaum findet manpslist unter sysutils/pslist:
# cd /usr/ports/sysutils/pslist && make install clean
Übergibt man eine Prozess-ID an pslist, so werden die Prozess-IDs aller Kind-Prozesse angezeigt:
# pslist 4816 4816 sh 4817 4818 4819 # pstree -p 4816 -+= 00001 root /sbin/init -- \-+- 02761 root /usr/local/bin/xdm -nodaemon ttyv8 \-+= 02817 root xdm: :0 (xdm) \-+= 02829 beat fluxbox \-+= 03854 beat /bin/csh -c xterm \-+- 03861 beat xterm \-+= 03863 beat csh \-+= 04816 beat /bin/sh ./test \-+- 04817 beat /bin/sh ./test \-+- 04818 beat /bin/sh ./test \--- 04819 beat sleep 60
Sendet man nun ein SIGTERM-Signal an den Prozess welcher die Kind-Prozesse gestartet hat, so laufen die Kind-Prozesse weiter, werden jedoch Kind-Prozesse des init Prozesses:
# kill 4816 # pstree -+= 00001 root /sbin/init -- [...] \-+- 04817 beat /bin/sh ./test \-+- 04818 beat /bin/sh ./test \--- 04819 beat sleep 60
Soll das SIGTERM-Signal an einen Prozess und allen seinen Kind-Prozessen gesendet werden kann rkill verwendet werden:
# rkill 4816
Möchte man ein anderes Signal als das SIGTERM-Signal verwenden, so kann auch dies an rkill übergeben werden. Im folgenden Beispiel wid das SIGKILL-Signal an alle Prozesse gesendet:
# rkill -9 4816
Mehr Informationen zu pslist und rkill findet man in der Manpage pslist(1).