Foi o que aconteceu quando eu executei, sudo su
seguido porexit
$ sudo su
# exit
exit
$
O comando exit não fecha meu emulador de terminal.
É um terminal infantil?
command-line
bash
sudo
gnome-terminal
su
Reeshabh Ranjan
fonte
fonte
Mesmo terminal, concha diferente.
Os processos filho executados a partir de um shell, incluindo as conchas filho, usam o mesmo terminal automaticamente. Isso não é específico de
sudo
forma alguma - geralmente é assim que funciona quando você executa qualquer programa do seu shell.Conchas e terminais são coisas diferentes. Um shell é o que você usa para executar comandos em um terminal . Um shell pode operar interativamente - ele fornece um prompt, um comando, executa o comando ou mostra um erro sobre o motivo pelo qual não pode, e o processo se repete até que você saia do shell. Ou pode operar de maneira não interativa, executando um script .
Mesmo que o seu terminal seja (provavelmente!) Emulado , não sistemas operacionais físicos , como o Unix, como o Ubuntu, atribuem nós de dispositivo a cada um dos seus terminais, e você pode verificar qual terminal está usando com o
tty
comando Normalmente, será/dev/pts/0
,/dev/pts/1
,/dev/pts/2
, etc. , para uma janela de terminal ou conexão SSH , ou/dev/tty1
,/dev/tty2
, etc. , para consoles virtuais . Realmente, o quetty
faz é dizer a você de qual terminal, se houver, a entrada está sendo retirada; veja abaixo para detalhes.Você pode ver que, apesar de
sudo su
criar um novo shell como Yaron explica muito bem , o terminal que você está usando não muda.Obviamente, há outra maneira de observar que o terminal é o mesmo: você continua escrevendo as entradas da mesma maneira e no mesmo lugar e lendo a saída da mesma maneira e no mesmo lugar.
Alguns detalhes técnicos
A maioria dos comandos é executado em um shell - como
ls
,cp
,mv
,rm
,touch
,wc
,du
,df
,ssh
,su
,sudo
,sh
,bash
, e muitos mais - causar um processo filho para ser criado. Esse processo filho tem seu shell como pai, mas é um programa separado. Por padrão, ele está conectado ao mesmo terminal que seu shell.Seu shell ainda está em execução, mas aguarda em segundo plano o programa terminar (ou você suspendê-lo ). Quando o programa termina, o shell ainda está em execução e retoma a operação, solicitando seu próximo comando.
Estas são as principais exceções:
cd
não criam um novo processo, a menos que sejam usados em uma construção que emprega um subshell ( explicado aqui ), como(
)
agrupamentos e pipelines .&
. (your-command arguments... &
)disown
built-in , você pode destacar trabalhos do seu terminal.Embora eu realmente não considere isso uma exceção para os processos filhos serem conectados ao mesmo terminal que o pai, observe que um processo executado a partir de um shell em um terminal nem sempre estará recebendo entrada desse terminal ou enviando saída para esse terminal :
<
,>
e>>
operadores.|
.Como o
tty
comando verifica apenas qual terminal é sua entrada padrão, você pode "enganá-lo":Ou, menos desonestamente:
fonte