ネストされたコマンド グループはネストされたプロセス グループを生成しませんか?

ネストされたコマンド グループはネストされたプロセス グループを生成しませんか?

私は bash を使い始めたばかりで、1 か月ほど前から断続的に使っています。

ネストされたコマンド グループがどのように機能するかを理解しようとして、次のコマンドを試しました。

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

さて、私が期待していたのは、ネストされたグループが、新しい bash シェルをグループ リーダーとして持つ別のプロセス グループを生成することでした。新しい bash シェルが作成されますが、何らかの理由で、ネストされた bash シェルはその上の bash シェルと同じプロセス グループにあります。

これはなぜでしょうか? プロセス情報を静的に表示しようとしているからでしょうか?

答え1

( .. )最初の推測としては、サブシェルで始まるものは使用しないと思います。ジョブ制御、非対話型スクリプトではそうではないのと同じように。ただし、 には、括弧内にも for ジョブ制御$-が含まれているようですm(対話型の場合も同様i)。

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

しかし、ジョブ制御を明示的に有効にすると、いくつかのプロセス グループが表示されるので、それは少し嘘だと思います。

これらはすべて 1 つの 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

これらはそうではありません:

$ ( 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

関連情報