Quando tento parar alguma coisa, uso ^C
e às vezes ^D
no terminal.
Qual a diferença entre os dois? Por que algum programa não responde ^C
, mas ^D
. Por que o Terminal.app é encerrado quando uso ^D
?
Quando tento parar alguma coisa, uso ^C
e às vezes ^D
no terminal.
Qual a diferença entre os dois? Por que algum programa não responde ^C
, mas ^D
. Por que o Terminal.app é encerrado quando uso ^D
?
Respostas:
CtrlCinforma ao terminal para enviar um SIGINT
ao processo atual em primeiro plano, que por padrão se traduz em encerrar o aplicativo. CtrlDinforma ao terminal que ele deve registrar um EOF na entrada padrão, que o bash interpreta como um desejo de sair.
Ctrl+ D( ^D
) significa final do arquivo . Funciona apenas no início de uma linha (estou simplificando um pouco) e não tem efeito se o programa não estiver lendo as entradas do terminal. Em seu experimento, ^D
disse ao shell que você não digitaria mais nenhum comando, então ele saiu; então o terminal saiu porque seu subprograma terminou.
Ctrl+ C( ^C
) significa "interromper", ou seja, pare o que você está fazendo. Tecnicamente, pressionar pressiona ^C
envia o sinal INT , que por padrão encerra um aplicativo, mas que em muitos programas significa voltar ao nível superior (por exemplo, em um shell, pare de digitar uma linha de comando e volte a um prompt primitivo).
Se um programa não responder ^C
, você pode tentar Ctrl+ \( ^\
). Isso envia o sinal QUIT , que por padrão encerra um aplicativo e que não são interceptados por tantos programas.
Outra tecla que envia um sinal é Ctrl+ Z( ^Z
). Ele envia o sinal TSTP , que interrompe o programa em execução em primeiro plano. (TSTP é a abreviação de "terminal stop"; é semelhante a STOP, mas o TSTP pode ser ignorado, enquanto STOP não pode.) No shell, você pode retomar a execução desse programa com o fg
comando (resume em primeiro plano) ou o bg
comando (resume em fundo).
Todas essas chaves podem ser alteradas com o stty
comando Alguns programas, principalmente os de tela cheia que possuem ligações de teclas, os desativam.
KeyboardInterrupt
? Ele sai com ctrl + d (se no início de uma linha) e com ctrl + \.
Adicionando as 2 respostas realmente boas acima, aqui está um exemplo:
Se você digitar python
o shell, ele será direcionado para o prompt >>> do python.
Agora, se você pressionar Ctrl+C
, ele dirá KeyboardInterrupt
e permanecerá no >>>.
Se você entrar em um loop for, por exemplo, digitando for x in (text):
-o, espera que você digite mais, mostrando um prompt ..., se você pressionar Ctrl+C
agora, ele sairá da instrução for e retornará para o prompt >>>
Se você pressionar Ctrl+D
a qualquer momento, seja em >>> ou ..., sairá do prompt do python e retornará ao shell original.
Da mesma forma, se transferido para outra máquina, a Ctrl+C
encerrará todos os comandos existentes, Ctrl+D
fará isso e sairá da máquina também. (Além disso, a Delete
chave é a mesma que a Ctrl+D
)