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 m
control de trabajo incluso entre paréntesis (así como i
para 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