Was macht kill 0 eigentlich?

10

In der man pageheißt es:

          0      All processes in the current process group are signaled

Und ich habe es so versucht:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

Wie ich verstanden habe, kill 0werden alle Prozesse im aktuellen Prozess beendet, einschließlich pid15247. In diesem Beispiel wurde jedoch nichts unternommen. Hat jemand Ideen, wie man es benutzt?

Firegun
quelle
Welche Shell benutzt du?
FatalError
@FatalError Ich benutze Bash
Firegun
Siehe auch den Unix.SE-Klon dieser Frage .
Adam Katz

Antworten:

4

Ich konnte kill 0auf meiner Kill Man Page (Debian) keine Notiz finden, wie sich das verhält.

Aber ich habe zwei Kommentare:

(1) "Prozessgruppe" entspricht möglicherweise nicht Ihren Erwartungen. Sie können die Prozessgruppen-ID (PGID) anzeigen mit ps -o "%p %P %r %c %a":

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

Das manzusammen mit dem angezeigten Pager-Tool ( less) befindet sich also in derselben Prozessgruppe, unterscheidet sich jedoch von dem der Shell (in meinem Fall zsh).

(2) Es gibt wahrscheinlich zwei verschiedene killBefehle. Eine eingebaute bash(siehe Bash (1), Abschnitt "SHELL BUILTIN COMMANDS") und die externe /bin/kill. Diese beiden können sich unterschiedlich verhalten! Sie können explizit angeben, welche Sie ausführen möchten, indem Sie builtin killoder command killanstelle von eingeben kill. Den externen Befehl können Sie auch ausführen, indem Sie den Pfad angeben : /bin/kill.

mpy
quelle
1
PPIDist die übergeordnete Prozess-ID, die häufig, aber nicht unbedingt, die Prozessgruppen-ID ist. Die richtige Spalte ist PGID, die nicht in der Standardausgabe angezeigt pswird. Sie müssen die -oOption verwenden, um ein benutzerdefiniertes Format zu erstellen, das es enthält.
Chepper
@chepner: Du hast absolut recht, danke! Ich war durch die ps (1) -Manpage meines Cygwin verwirrt, auf der steht: "-l, --long: Prozess-Uids, ppids, pgids, winpids anzeigen". Schade um mich, ich habe meine Antwort entsprechend bearbeitet. Meine Aussage (nur man + pager haben die gleiche PGID) ist jetzt wie beabsichtigt korrekt. (Bevor auch dieser Satz falsch war :-()
mpy
1

Geben Sie Folgendes ein, um alle Ihre Prozesse zu stoppen und sich abzumelden:

kill -kill 0

Dies sendet das Signal 9, das SIGKILL-Signal, an alle Prozesse mit einer Prozessgruppen-ID, die der Prozessgruppen-ID des Absenders entspricht. Da die Shell das SIGKILL-Signal nicht ignorieren kann, stoppt dies auch die Anmeldeshell und meldet Sie ab

Dies ist das AIX-Handbuch von IBM, aber möglicherweise gilt das Konzept.

Diese Funktionalität existiert unter Linux "kill" nicht (wie ich sehen kann); aber so verhält sich "töten":

Das Töten von 0 beendet nicht die PID 0. Stattdessen ist es eine Option beim Töten, um alle Prozesse in der aktuellen Gruppe zu beenden . Mit Ihrem Befehl beenden Sie alles in der Prozessgruppen-ID (GID) der Shell, die den Befehl kill ausgegeben hat.

Däne Balia
quelle