嵌套命令組不會產生巢狀進程組嗎?

嵌套命令組不會產生巢狀進程組嗎?

我對 bash 有點陌生,並且已經連續使用它大約一個月了。

在嘗試了解嵌套命令組的工作原理時,我嘗試了以下命令:

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

現在,我所期望的是嵌套組將產生一個單獨的進程組,並以新的 bash shell 作為組長。創建了一個新的 bash shell,但由於某種原因,嵌套的 bash shell 與其上面的 bash shell 位於同一進程組中。

為什麼是這樣?可能是因為我試圖靜態查看進程資訊?

答案1

作為第一個猜測,我假設以( .. )不使用開頭的子外殼作業控制,就像非互動式腳本不這樣做一樣。然而,$-似乎甚至在括號內也包含m用於作業控制(以及i用於互動):

$ 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

相關內容