Pressionar ctrl-c várias vezes faz com que o programa em execução feche mais rapidamente?

41

Muitas vezes começo a ler um arquivo enorme e depois quero sair depois de um tempo, mas há um atraso de pressionar + C para o programa pára. Existe uma chance de encurtar a defasagem pressionando a tecla Ctrl + C várias vezes? Ou estou perdendo minhas pressões?

    
por The Unfun Cat 15.01.2014 / 08:33

6 respostas

35

Após o primeiro Ctrl-C , o programa receberá SIGINT e geralmente começa a limpar (apagar arquivos tmp, fechar soquetes, etc.). Se você pressionar Ctrl-C novamente enquanto isso está acontecendo, pode acontecer que você interrompa a rotina de limpeza (ou seja, o sinal adicional pode ser atendido em vez de ficar sozinho), deixando uma bagunça para trás. Enquanto isso geralmente não é o caso, mais comumente os sinais adicionais são de fato enviados após o processo ser concluído (por causa dos atrasos inerentes à interação do operador com o sistema). Isso significa que os sinais são recebidos por outro processo (geralmente shell, mas nem sempre). Se esse destinatário não manejar este sinal corretamente (como o shell normalmente faz - veja a resposta de Jenny D), você pode ser desagradavelmente surpreendido pelo resultado de tal ação.

    
por 15.01.2014 / 08:39
11

Você está perdendo eles. Tudo o que acontece é que, uma vez que o servidor termine com a saída da tela, ele receberá vários Ctrl-C . O primeiro deles será usado para matar o processo, e os seguintes terminarão no seu shell, que então será parecido com

[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ 
    
por 15.01.2014 / 08:38
5

Resposta curta : se o processo reagir a ela.

Resposta

Long : Quando você pressiona ctrl + c , o kernel envia um sinal para o processo. Qual sinal pode ser determinado pelo seguinte comando:

user@host:~# stty -a | grep -i "\^C"
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

Veja a página do manual de stty :

   intr CHAR
          CHAR will send an interrupt signal

É o sinal INT , também conhecido como número 2. Quando o processo tem um manipulador de sinal, ele pode reagir a isso. A maioria dos processos faz alguns trabalhos de limpeza para terminar com sucesso.

    
por 15.01.2014 / 09:06
4

Você está certo. Os pressionamentos das teclas estão sendo desperdiçados. Quando você pressiona Crtl + C e ele é detectado, existem recursos que precisam ser limpos, e é por isso que leva tempo. O único caso possível que eu sei onde é necessário pressionar Ctrl + C , é quando você deseja cancelar um processo de atualização do Yum, onde o Yum exige que você pressione Ctrl + C duas vezes confirme que você realmente deseja cancelar.

    
por 15.01.2014 / 08:54
2

Embora apenas um Ctrl-C seja necessário no caso geral, existem algumas situações em que pode ser necessário. Python, por exemplo, traps Ctrl-C quando um novo thread está sendo gerado, e assim, se algo der errado no meio do início de muitos threads, é necessário reenviá-lo várias vezes para que para passar para o processo python parent sem ser capturado.

    
por 16.01.2014 / 04:39
0

Eu sempre tenho que pressionar Ctrl c várias vezes. Eu nunca tive que responder na primeira impressão, e tenho que usá-lo várias vezes até que o sistema realmente perceba que há uma Ctrl c sendo enviada. Parece que realmente perde / perde a maioria deles.

    
por 15.01.2014 / 21:26