
Da interface de programação Linux
Em um shell interativo, esses três descritores de arquivo 0, 1 e 2 normalmente se referem ao terminal sob o qual o shell está sendo executado.
"O terminal sob o qual o shell está sendo executado" significa o terminal de controle da sessão à qual o shell interativo pertence?
Se sim, e se a sessão do shell não tiver um terminal de controle?
Quando o shell é criado a partir de seu processo pai, o shell criará automaticamente uma conexão entre os descritores de arquivo 0, 1 e 2 e o terminal, em cada um dos seguintes casos (herança do processo pai do shell):
se "o terminal sob o qual o shell está sendo executado" ou o terminal de controle já foi aberto em um descritor de arquivo que não é 0, 1 e 2?
se os descritores de arquivo 0, 1 e 2 já foram conectados a um arquivo que não é "o terminal sob o qual o shell está sendo executado" ou o terminal de controle?
- E se o shell da cotação não for interativo?
Obrigado.
A propósito, apenas suponha que "shell" seja POSIX ou bash.
RelacionadoComo podemos desconectar um descritor de arquivo de qualquer arquivo?
Responder1
Não.
Isso é feito pelas várias implementações de getty
, poropen-controlling-tty
, pela parte bifurcada do lado pty-slave de um servidor SSH, pela parte bifurcada do lado pty-slave de um emulador de terminal GUI ou algo assim.
E observe que o texto citadonão tem implicaçãoque o shell faz isso. Você criou um monte de perguntas baseadas em uma premissa falsa tirada do nada.
E você sabia que getty
isso acontecia, porque escreveu que acontecia em "Quando é iniciada a sessão do processo liderada por login?", escrito ao mesmo tempo que esta pergunta.
Leitura adicional
- Qual é a diferença entre getty e agetty?
- "askfirst" getty com systemd ("pressione enter para ativar este console")
- Jonathan de Boyne Pollard. "Login no terminal virtual".guia nosh. Programas.
- Jonathan de Boyne Pollard. "Login de terminal real".guia nosh. Programas.