Erzeugen verschachtelte Befehlsgruppen keine verschachtelten Prozessgruppen?

Erzeugen verschachtelte Befehlsgruppen keine verschachtelten Prozessgruppen?

Ich bin relativ neu bei Bash und spiele seit etwa einem Monat ab und zu damit herum.

Beim Versuch zu verstehen, wie verschachtelte Befehlsgruppen funktionieren, habe ich den folgenden Befehl ausprobiert:

((ps j; ps j); ps j; ps j)

Nun, ich hatte erwartet, dass die verschachtelte Gruppe eine separate Prozessgruppe mit einer neuen Bash-Shell als Gruppenleiter erstellen würde. Eine neue Bash-Shell wird erstellt, aber aus irgendeinem Grund befindet sich die verschachtelte Bash-Shell in derselben Prozessgruppe wie die darüber liegende Bash-Shell.

Warum ist das so? Liegt es vielleicht daran, dass ich versuche, Prozessinformationen statisch anzuzeigen?

Antwort1

Als erste Vermutung würde ich annehmen, dass Subshells mit ( .. )don't use begannenJobkontrolle, genau wie nicht interaktive Skripte. Allerdings $-scheint die mfor-Job-Steuerung auch in Klammern enthalten zu sein (ebenso wie ifür interactive):

$ echo $-
himuBs
$ bash -c 'echo $-'
hBc
$ ( echo $-; )
himuBs

Ich glaube jedoch, dass das ein wenig gelogen ist, da durch die explizite Aktivierung der Jobsteuerung einige Prozessgruppen angezeigt werden.

Dies sind alle in einem PG:

$  ( (ps j; ps j); ps j;) | awk 'NR == 1 || /[p]s/'
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
32524 32525 32522 32368 pts/23   32522 R+    1000   0:00 ps j
32524 32526 32522 32368 pts/23   32522 R+    1000   0:00 ps j
32522 32527 32522 32368 pts/23   32522 R+    1000   0:00 ps j

Dies sind nicht:

$ ( set -m; (ps j; ps j); ps j;) | awk 'NR == 1 || /[p]s/'
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
32518 32519 32518 32368 pts/23   32516 R     1000   0:00 ps j
32518 32520 32518 32368 pts/23   32516 R     1000   0:00 ps j
32516 32521 32521 32368 pts/23   32516 R     1000   0:00 ps j

verwandte Informationen