In der man page
steht:
kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
pid... Specify the list of processes that kill should signal. Each pid can be one of five things:
0 All processes in the current process group are signaled
Und so habe ich es in bash versucht:
$ man kill &
[1] 15247
$
[1]+ Stopped man kill
$ kill 0
$ ps
15247 pts/41 00:00:00 man
Hier 0
wird als verwendet pid
. Wie ich verstanden habe, kill 0
werden alle Prozesse im aktuellen Prozess abgebrochen, einschließlich pid15247
. In diesem Beispiel hat es jedoch nichts getan. Hat jemand Ideen, wie man es benutzt?
process
kill
process-groups
Feuerwaffe
quelle
quelle
SIGTERM
an den Prozess, den es ausgeführt hat. Derman
Befehl hat beschlossen, ihn zu ignorieren.ps -j
, um die Prozessgruppen anzuzeigen.kill -0
(Anmerkung des Bindestrich), das ein anderes Thema ist, bei Stackoverflow und hier auf Unix.SE .Antworten:
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 0
bricht die Prozessgruppe des Anrufers ab.Beachten Sie
/bin/kill 0
, dass die Shell in diesem Fall einen neuen Job startet, um diesenkill
Befehl auszuführen , sodass siekill
sich nur selbst beendet.kill
ist normalerweise eine eingebaute Shell, daherkill
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:
Oben
sleep
undps
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:
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. (Dassleep
obige soll genügend Zeit geben, damit der Pager gestartet werden kann, damit wir ihn in derps -j
Ausgabe sehen können, bevor wir ihn beenden).quelle
kill -- -$x
Eigentlich heißt esbash: kill: (-63531) - No such process
in Bash 5.0.11 (1) -Release auf MacOS 10.14, aber es ist sicher, dass Prozess existiert und läuft.pkill -P
funktioniert gutps -j
Informieren Sie sich in der Ausgabe von über pgids