入れ子になったコマンドグループは入れ子になったプロセスグループを作成しませんか?

入れ子になったコマンドグループは入れ子になったプロセスグループを作成しませんか?

私は初めてbashに触れ、約1ヶ月間使い続けてきました。

入れ子になったコマンドグループがどのように機能するかを理解しようとして、次のことを試しました。

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

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

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

ベストアンサー1

最初の推測として、私は未使用で始まる( .. )サブシェルを想定しています。職業管理、非対話型スクリプトがこれを実行しないように。ただし、ジョブ制御(および対話)のために括弧$-も含まれているようです。mi

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

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

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

おすすめ記事