Вложенные группы команд не создают вложенные группы процессов?

Вложенные группы команд не создают вложенные группы процессов?

Я новичок в bash и играю с ним уже около месяца.

Пытаясь понять, как работают вложенные группы команд, я попробовал следующую команду:

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

Теперь я ожидал, что вложенная группа создаст отдельную группу процессов с новой оболочкой bash в качестве лидера группы. Создается новая оболочка bash, но по какой-то причине вложенная оболочка bash находится в той же группе процессов, что и оболочка bash над ней.

Почему так? Может быть, это потому, что я пытаюсь просматривать информацию о процессе статически?

решение1

В качестве первого предположения я бы предположил, что подоболочки, начинающиеся с ( .. )don't useконтроль работы, так же, как неинтерактивные скрипты. Однако, $-похоже, содержит элемент mуправления for job даже внутри скобок (так же как и iдля interactive):

$ 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

Связанный контент