Wie es heißt, sendet es das Signal an alle Mitglieder der Prozessgruppe des Anrufers.
Prozessgruppen werden verwendet, um die Jobsteuerung in der Shell zu implementieren (sie können für andere Zwecke verwendet werden, aber die interaktive Jobsteuerung der Shell ist der Hauptgrund für ihre Existenz).
Sie werden feststellen, dass bei der Eingabe Ctrl-Calle Prozesse der aktuellen Jobs abgebrochen werden, nicht nur derjenige, der sie gestartet hat. Außerdem werden die Hintergrundjobs dadurch nicht beendet.
Dies wird mit Prozessgruppen erreicht. Ein Job ist eine Gruppe von Prozessen, die von einer Shell gestartet werden, die die Shell in den Hintergrund oder in den Vordergrund stellen (als Vordergrundprozessgruppe des Terminals festlegen oder nicht) und als Ganzes beenden kann.
Informationen zu Prozessgruppen-IDs und Sitzungs-IDs erhalten Sie mit ps -j
( j
zur JKontrolle).
So beenden $x
Sie die Prozessgruppe der PGID :
kill -- "-$x"
kill 0
bricht die Prozessgruppe des Anrufers ab.
Beachten Sie /bin/kill 0
, dass die Shell in diesem Fall einen neuen Job startet, um diesen kill
Befehl auszuführen , sodass sie kill
sich nur selbst beendet.
kill
ist normalerweise eine eingebaute Shell, daher kill
wird die Prozessgruppe der Shell abgebrochen .
Wenn die Shell interaktiv ist, handelt es sich jedoch um die Prozessverwaltungsprozessgruppen. In der Regel befindet sich also kein anderer Prozess in der Prozessgruppe der Shell. Alle von der Shell gestarteten Prozesse befinden sich in anderen Prozessgruppen:
$ sleep 1000 &
[1] 22746
$ ps -j
PID PGID SID TTY TIME CMD
22735 22735 22735 pts/23 00:00:00 zsh
22746 22746 22735 pts/23 00:00:00 sleep
22749 22749 22735 pts/23 00:00:00 ps
Oben sleep
und ps
in zwei verschiedenen Prozessgruppen, eine im Hintergrund und eine im Vordergrund, und sie unterscheiden sich von der Prozessgruppe der Shell.
Sie könnten aber tun:
(man kill & sleep 1; ps -j; kill 0)
Die interaktive Shell würde eine neue Prozessgruppe für diese Subshell starten, und sowohl die Subshell als auch man (und die anderen von man gestarteten Befehle wie Ihr Pager, groff ...) würden sich in derselben Prozessgruppe befinden, also kill 0
dort arbeiten. (Das sleep
obige soll genügend Zeit geben, damit der Pager gestartet werden kann, damit wir ihn in der ps -j
Ausgabe sehen können, bevor wir ihn beenden).
SIGTERM
an den Prozess, den es ausgeführt hat. Derman
Befehl hat beschlossen, ihn zu ignorieren.