O compartilhamento de SID por processos * always * implica em seu PGID compartilhado?

2

Se não, então quando diverge?

(não consegui fazê-los divergir.)

E que outras características os processos de compartilhamento de SID sempre compartilham?

    
por dziadek1990 13.06.2015 / 18:23

1 resposta

4

As sessões contêm grupos de processos que contêm processos.

Esses foram criados principalmente para controle de trabalho de terminal. Uma sessão é normalmente associada a uma sessão de login em um terminal ou a toda a sessão do shell em um emulador de terminal.

Quando você faz login ou inicia xterm , é criado um novo processo que inicia uma nova sessão (que inicia automaticamente um novo grupo de processos) e esse processo (que agora é líder de sessão e líder do grupo de processos) executa seu login Concha. Ao abrir o dispositivo terminal sem O_NOCTTY, esse processo também associa esse dispositivo terminal à sessão (e se torna o processo de controle desse terminal). Esse dispositivo terminal se torna o terminal de controle de todos os processos naquela sessão.

Esse shell, em seguida, executa trabalhos em seu próprio grupo de processos (bifurcando um processo que inicia um novo grupo de processos e pode acabar bifurcando vários outros processos nesse grupo (por exemplo, para pipelines como cmd1 | cmd2 )) e faz especial ioctl()s para o dispositivo de terminal para dizer qual desses jobs está em primeiro plano (assim eles podem fazer I / O para o terminal e receber o SIGINT em CTRL-C, por exemplo).

Então, sim, você normalmente tem vários grupos de processos por sessão.

Por exemplo, em um shell interativo:

$ sleep 1 | sh -c 'sleep 2; :' & ps -j
[1] 2902 2903
  PID  PGID   SID TTY          TIME CMD
 2902  2902  4648 pts/23   00:00:00 sleep
 2903  2902  4648 pts/23   00:00:00 sh
 2904  2904  4648 pts/23   00:00:00 ps
 2905  2902  4648 pts/23   00:00:00 sleep
 4648  4648  4648 pts/23   00:00:00 zsh

3 grupos de processos, um em primeiro plano ( ps ), um em segundo plano com 3 processos ( sleep , sleep , sh ) e meu shell interativo.

Todos os processos de um grupo de processos estão necessariamente na mesma sessão que a criação de uma nova sessão (que você não pode fazer se for um líder de grupo de processos) cria automaticamente um novo grupo de processos.

Eu recomendo a leitura

info libc 'Job Control'

em um sistema GNU para mais informações.

    
por 13.06.2015 / 22:30

Tags