É o processo que possui um terminal de controle, ou é a sessão que possui um terminal de controle?

4

Quando dizemos que um processo tem um terminal de controle, queremos dizer que o processo em si tem um terminal de controle, ou é a sessão a qual o processo pertence que tem um terminal de controle?

Eu costumava pensar que é a sessão que tem um terminal de controle, mas eu li o seguinte (de aqui ) que implica que é o processo que tem um terminal de controle:

One of the attributes of a process is its controlling terminal. Child processes created with fork inherit the controlling terminal from their parent process. In this way, all the processes in a session inherit the controlling terminal from the session leader. A session leader that has control of a terminal is called the controlling process of that terminal.

    
por Joseph 20.11.2017 / 13:10

1 resposta

7

É 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.
por 20.11.2017 / 15:01