Os grupos de comandos aninhados não produziram grupos de processos aninhados?

4

Eu sou novo com o bash e tenho jogado com ele por cerca de um mês.

Ao tentar entender como os grupos de comando aninhados funcionam, tentei o seguinte comando:

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

Agora, o que eu esperava era que o grupo aninhado produzisse um grupo de processos separado com um novo shell bash como o líder do grupo. Um novo shell bash é criado, mas por algum motivo, o shell bash aninhado está no mesmo grupo de processos que o shell bash acima dele.

Por que isso? Talvez seja porque estou tentando visualizar as informações do processo estaticamente?

    
por deftextra 28.11.2017 / 22:00

1 resposta

3

Como primeiro palpite, eu suponho que as subshells iniciadas com ( .. ) não usam controle de trabalho , da mesma forma que os scripts não interativos não. No entanto, $- parece conter o m para o controle de trabalho, mesmo entre parênteses (assim como i para interativo):

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

Mas acho que isso é uma mentira, já que ativar explicitamente o controle de tarefas faz com que alguns grupos de processos apareçam.

Tudo isso em um único 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

Estes não são:

$ ( 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
    
por 30.11.2017 / 00:36