Beim Senden eines Signals an PID 0 (Null) wird das Signal an alle Prozesse geliefert, die Mitglieder derselben Prozessgruppe wie der Absender sind. Eine andere Prozessgruppe als die aktuelle kann mit kill(-PGID)
(oder kill -- -PGID
in der Shell) signalisiert werden, wobei PGID
sich die Prozessgruppen-ID befindet.
Die Prozessgruppe einer PID wird von der getpgid()
Funktion zurückgegeben, und die Prozessgruppe des aktuellen Prozesses kann mit gefunden werden getpgrp()
.
In der Shell können Sie verwenden
$ ps -opid,pgid,command
um die PID, PGID (Prozessgruppen-ID) und Befehlszeile Ihrer aktuellen Sitzung abzurufen.
Dies kann so etwas wie zurückgeben
PID PGID COMMAND
20716 20716 -ksh93 (ksh93)
83662 83662 -ksh93 (ksh93)
4322 4322 /usr/X11R6/bin/xclock
5374 5374 tmux: client (/tmp/tmux-11000/default) (tmux)
78747 78747 -ksh93 (ksh93)
29298 29298 ps -opid
63563 63563 -ksh93 (ksh93)
63327 63327 mutt
21790 21790 -ksh93 (ksh93)
64493 64493 /bin/sh /usr/X11R6/bin/startx
14485 64493 xinit /home/kk/.xinitrc -- /usr/X11R6/bin/X :0 -auth /home/kk/.serverauth.E3cwuT5FZR
93531 93531 sh /home/kk/.xinitrc
48598 93531 flwm
28154 93531 xterm
73053 93531 xterm
Nach einer Klärung der Frage:
Der Zweck einer Prozessgruppe besteht darin, ein Signal an alle ihre Mitglieder senden zu können, ohne die Prozess-IDs jedes einzelnen Mitglieds zu kennen.
Ohne ein Prozessgruppenkonzept müsste man alle Prozesse auf dem System abrufen, herausfinden, wie sie zusammenhängen (unter Verwendung der übergeordneten Prozess-IDs) und die relevanten Prozesse durchlaufen und jeweils das Signal senden.
Der Kernel tut dies, aber er kennt und verfolgt Prozessgruppen, sodass er niemals alle Prozesse durchlaufen muss, um ein Signal an eine Prozessgruppe zu senden , sondern nur über die Mitglieder der Gruppe.
Da die Prozessgruppen-ID für den Benutzer verfügbar ist , muss nur ein Prozess nach seiner Prozessgruppen-ID abgefragt werden, bevor ein Signal an alle Prozesse in dieser Gruppe gesendet werden kann.