Qual é a diferença entre ^ C e ^ D para o terminal UNIX / Mac OS X?

47

Quando tento parar algo, eu uso ^ C e às vezes ^ D no terminal.

Qual é a diferença entre os dois? Por que alguns programas não respondem a ^ C, mas ^ D. Por que o Terminal.app acaba de sair quando eu uso ^ D?

    
por prosseek 28.07.2010 / 23:02

3 respostas

51

O Ctrl C diz ao terminal para enviar uma SIGINT para o atual processo de primeiro plano, que por padrão se traduz em encerrar o aplicativo. Ctrl D informa ao terminal que deve registrar um EOF na entrada padrão, que o bash interpreta como um desejo de sair.

    
por 28.07.2010 / 23:06
47

Ctrl + D ( ^D ) significa fim do arquivo . Ele só funciona no início de uma linha (estou simplificando um pouco) e não tem efeito se o programa não estiver lendo a entrada do terminal. Na sua experiência, ^D disse ao shell que você não iria digitar mais nenhum comando, então ele saiu; então o terminal saiu porque seu subprograma havia terminado.

Ctrl + C ( ^C ) significa “interromper”, ou seja, parar o que você está fazendo. Tecnicamente, pressionar ^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 para um prompt prístino).

Se um programa não responder a ^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 muitos programas.

Outra tecla que envia um sinal é Ctrl + Z ( ^Z ). Ele envia o sinal TSTP , que pausa o programa em execução em primeiro plano. (TSTP é a abreviatura de “terminal stop”; é semelhante a STOP , mas o TSTP pode ser ignorado, enquanto o STOP não pode.) shell, você pode retomar a execução desse programa com o comando fg (continuar no primeiro plano) ou o comando bg (continuar no segundo plano).

Todas essas chaves podem ser alteradas com o comando stty . Alguns programas, particularmente programas em tela cheia que possuem atalhos de teclado, os desativam.

    
por 28.07.2010 / 23:16
2

Adicionando as duas respostas realmente boas acima, aqui está um exemplo:

Se você digitar python no shell, ele será direcionado para o > > > do python pronto.

Agora, se você atingir Ctrl+C , ele dirá KeyboardInterrupt e permanecerá no > > & gt ;.
Se você entrar em um loop for, por exemplo digitando for x in (text): , ele espera que você digite mais, mostrando um ... prompt, se você atingir Ctrl+C agora, ele sairá da instrução for e retornará para a > > > prompt
Se você acertar Ctrl+D a qualquer momento, seja em > > > ou ... ele sairá do prompt do python e retornará ao shell original.

Da mesma forma, se ssh'ed em outra máquina, Ctrl+C terminará qualquer comando existente, Ctrl+D fará isso e sairá da máquina também. (Além disso, a tecla Delete é a mesma que fazer um Ctrl+D )

    
por 29.01.2014 / 03:57