O líder de sessão é o único processo em seu grupo?

3

O diagrama a seguir da APUE me leva a pensar: em uma sessão de processo, o grupo de processos do líder da sessão contém apenas o líder da sessão e nenhum outro processo?

  • Qualquer processo criado por fork() herdará o mesmo grupo de processos e sessão de seu pai. Então, o líder da sessão pode dividir um número arbitrário de processos em seu próprio grupo de processos?

  • Por exemplo, um shell (quando é um líder de sessão) é o único processo em seu grupo de processos? Se sim, é porque quando o shell bifurca um processo filho, o filho está inicialmente no mesmo grupo de processos que o shell, mas então inicia imediatamente um novo grupo de processos chamando setpgid() ?

Obrigado.

    
por Tim 05.05.2018 / 21:29

2 respostas

1

Não, não há essa restrição. Se fosse o caso, os comandos que não implementam o controle de tarefas (na prática, apenas shells) não seriam capazes de bifurcar um processo (como processos filhos herdam o grupo de processos) quando iniciados como xterm -e that-command , por exemplo. / p>

Mesmo quando o líder da sessão é um shell interativo com o controle de tarefa ativado, você pode ter outros processos em seu grupo.

Em exibição:

xterm -e 'sleep 1000 & exec zsh'

E nesse xterm :

  PID  PGID   SID TTY          TIME CMD
14003 14003 14003 pts/20   00:00:00 zsh
14004 14003 14003 pts/20   00:00:00 sleep
14012 14012 14003 pts/20   00:00:00 ps

A maioria dos comandos executados a partir de um shell interativo é executada em grupos de processos separados, mas não é o caso de todos.

Por exemplo, em bash :

$ exec 3< <(sleep 1000)
$ ps -j
  PID  PGID   SID TTY          TIME CMD
13913 13913 13913 pts/19   00:00:00 bash
14136 13913 13913 pts/19   00:00:00 bash
14137 13913 13913 pts/19   00:00:00 sleep
14138 14138 13913 pts/19   00:00:00 ps

Ou os processos começaram como parte de expansões de prompt:

$ PS1=$'$(ps -j)\n$ '
  PID  PGID   SID TTY          TIME CMD
14212 14212 14212 pts/18   00:00:00 bash
14292 14212 14212 pts/18   00:00:00 ps
$ 
    
por 04.12.2018 / 15:01
1

Todos os comandos externos são executados em um grupo de processos diferente do do shell. O shell é um líder de sessão e, portanto, esse é o único processo em seu grupo de processos.

Todos os comandos que pertencem ao mesmo pipeline estão no mesmo grupo de processos.

    
por 06.05.2018 / 16:04