É de fato a sessão que tem um terminal de controle
A Especificação Single UNIX descreve a relação em termos do terminal de controle sendo "associado a uma sessão". Conforme vai especificando, um terminal de controle tem uma relação de 1: 1 com uma sessão. Há "no máximo um terminal de controle" associado a uma sessão e "um terminal de controle está associado a exatamente uma sessão".
O livro de design e implementação do FreeBSD aborda isso de maneira um pouco diferente, mas alcança o mesmo lugar. Não é possível que processos que compartilham a mesma sessão tenham diferentes terminais de controle, nem é possível que um único terminal seja o terminal de controle de várias sessões.
Internamente no FreeBSD, é assim que as estruturas de dados realmente funcionam. A estrutura do processo tem um ponteiro para a estrutura pgrp
representando o grupo de processos ao qual o processo pertence, que por sua vez aponta para a estrutura session
representando a sessão à qual o grupo de processos pertence, que por sua vez aponta para tty
estrutura do terminal de controle para a sessão.
Internamente no Linux, as coisas são um pouco mais complexas. Cada task_struct
tem um conjunto de ponteiros para pid
structures para seu ID de grupo de processos e ID de sessão; e tem outro ponteiro para uma estrutura signal_struct
por processo que, por sua vez, aponta diretamente para a estrutura tty
do terminal de controle.
Leitura adicional
- George V. Neville-Neil, Marshall Kirk McKusick e Robert N.M. Watson (2014-09-25). "Gerenciamento de processos". O Design e Implementação do Sistema Operacional FreeBSD . Addison-Wesley Professional. ISBN 9780133761832.
- Donald Lewine (1991). "Terminal I / O". Guia de Programadores POSIX . O'Reilly Media, Inc. ISBN 9780937175736.
- Daniel P. Bovet e Marco Cesati (2005). "Processos". Entendendo o Kernel Linux: Das Portas I / O ao Gerenciamento de Processos . 3ª edição. O'Reilly Media, Inc. ISBN 9780596554910.
- "Definições". As especificações básicas do grupo aberto . Edição 7. 2016. IEEE 1003.1: 2008.
- "Interface geral do terminal". As especificações básicas do grupo aberto . Edição 7. 2016. IEEE 1003.1: 2008.