O que acontece com uma sessão unix quando o líder da sessão sai?

1

Estou tentando emular adequadamente o gerenciamento de sinais POSIX e o controle de trabalho para meu sistema operacional de animal de estimação , mas não está claro para mim o que deve acontecer com uma sessão após o líder da sessão sair.

Não consigo encontrar documentação relacionada ao que acontece com a sessão e seu processo se, por exemplo, uma criança mata o líder da sessão enquanto vários processos em segundo plano e um processo diferente em primeiro plano estão sendo executados.

Meus testes mostram que todo o processo na sessão é morto, mas como?
Recebem um sinal específico?
Este caso é especificado no padrão POSIX? E se sim, você pode fornecer algumas referências?

    
por Giacomo Tesio 28.11.2017 / 10:35

1 resposta

4

Você não é o único intrigado por sessões POSIX; Lennart Poettering (ele de systemd fama) está confuso demais .

Tanto quanto qualquer um pode dizer, quando um líder de sessão morre, init herda a sessão órfã e

  • Todos os processos de membros da sessão no grupo de processos de primeiro plano (se houver) recebem um SIGHUP.

  • Os processos de membros da sessão que não estão no grupo de primeiro plano não recebem nenhum sinal.

Veja também:

If the terminal goes away by modem hangup, and the line was not local, then a SIGHUP is sent to the session leader. [...] When the session leader dies, a SIGHUP is sent to all processes in the foreground process group. [...] Thus, if the terminal goes away and the session leader is a job control shell, then it can handle things for its descendants, e.g. by sending them again a SIGHUP. If on the other hand the session leader is an innocent process that does not catch SIGHUP, it will die, and all foreground processes get a SIGHUP.

Andries Brower, The Linux Kernel, section 10.3 "Sessions".

    
por 28.11.2017 / 12:28