Soweit ich weiß, ist SIGKILL nicht zu fassen. Dies würde bedeuten, dass ein Prozess keine Zeit hat, seine Kinder zu töten, bevor das Betriebssystem es zerstört. Dies kann mit einem Shell-Skript demonstriert werden.
#! /bin/bash
trap : SIGTERM SIGINT SIGKILL # SIGKILL is pointless.
mplayer video.avi
Wenn du es mit SIGKILL tötest, läuft mplayer weiter.
$ kill -9 $pid
Bei Verwendung eines Terminal-Emulators (xterm, Terminal, ...) werden jedoch auch Kinder getötet. Wie ist das möglich?
$ mplayer
Und töte es:
$ kill -9 $terminal_pid
Und der Spieler geht mit dem Schiff unter. Fangen Terminal-Emulatoren irgendwie SIGKILL oder ist hier eine andere Kraft am Werk?
quelle
disown
die sehr nützlich ist.Ihre Frage beantwortet sich von selbst. Dies geschieht, weil diese Prozesse als untergeordnete Prozesse unter dem Terminalemulator ausgeführt werden. Sie beenden also den Terminalemulator und beenden dabei alle untergeordneten Prozesse (da die untergeordneten Prozesse unter derselben Prozessgruppe wie der steuernde Terminalemulator ausgeführt werden).
Siehe zum Beispiel Folgendes:
Alle diese Prozesse werden unter den 'xfce4-terminal'-Prozessen ausgeführt. Wenn ich diesen Prozess abbringe, werden alle untergeordneten Prozesse in der Prozessgruppe automatisch abgebrochen unbedingt meine SSH-Verbindung abbrechen.
Programme wie Shells erstellen neue Prozessgruppen und ordnen in der Regel verwandte untergeordnete Prozesse einer Gruppe zu. Jeder Job ist eine Prozessgruppe. Außerhalb des Kernels manipuliert eine Shell einen Job, indem sie mit dem Systemaufruf killpg Signale an die Prozessgruppe des Jobs sendet, die ein Signal an alle Prozesse in einer Prozessgruppe senden.
quelle
killpg
Systemaufruf zu diesem Zeitpunkt zu verwenden.Erstens kann ich den Spieler nicht reproduzieren, der das getötete Terminal überlebt
xterm
.Der Grund, warum es stirbt, ist, dass es einen SIGHUP vom Tod seiner Eltern bekommt.
quelle