¿Los grupos de comandos anidados no producen grupos de procesos anidados?

¿Los grupos de comandos anidados no producen grupos de procesos anidados?

Soy un poco nuevo con bash y he estado jugando con él durante aproximadamente un mes.

Mientras intentaba comprender cómo funcionan los grupos de comandos anidados, probé el siguiente comando:

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

Ahora, lo que esperaba es que el grupo anidado produjera un grupo de procesos separado con un nuevo shell bash como líder del grupo. Se crea un nuevo shell bash pero, por alguna razón, el shell bash anidado está en el mismo grupo de procesos que el shell bash que está encima.

¿Por qué es esto? ¿Quizás sea porque estoy intentando ver la información del proceso de forma estática?

Respuesta1

Como primera suposición, asumiría que las subcapas que comienzan con ( .. )no usancontrol de trabajo, de la misma manera que no lo hacen los scripts no interactivos. Sin embargo, $-parece contener el mcontrol de trabajo incluso entre paréntesis (así como ipara interactivo):

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

Pero creo que eso es un poco mentira, ya que habilitar explícitamente el control de trabajos hace que aparezcan algunos grupos de procesos.

Estos están todos en un 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

Estos no son:

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

información relacionada