Qual é a diferença entre Ctrl-z e Ctrl-c no terminal?

87

Alguém pode me dizer a diferença entre ctrl + z e ctrl + c ?

Quando estou no terminal, ambas as combinações param o processo atual, mas qual é exatamente a diferença entre as duas?

    
por chaitanya lakkundi 13.08.2014 / 15:50

6 respostas

120

Se deixarmos os casos de borda para um lado, a diferença é simples. Controle + C anula o aplicativo quase imediatamente enquanto Controle + Z o desativa no fundo, suspenso.

O shell envia sinais diferentes para os aplicativos subjacentes nessas combinações:

  • Controle + C (caractere de controle intr ) envia SIGINT que interromperá a aplicação. Geralmente causando a anulação, mas isso depende do aplicativo decidir.

  • Controle + Z (caractere de controle susp ) envia o SIGTSTP para um aplicativo de primeiro plano, efetivamente colocando-o em segundo plano, suspenso. Isso é útil se você precisar sair de algo como um editor para pegar alguns dados de que precisava. Você pode voltar para o aplicativo executando fg (ou %x , em que x é o número da tarefa, conforme mostrado em jobs ).

    Podemos testar isso executando nano TEST , depois pressionando Control + Z e executando ps aux | grep TEST . Isso nos mostrará que o processo nano ainda está em execução:

    oli     3278  0.0  0.0  14492  3160 pts/4    T    13:59   0:00 nano TEST
    

    Além disso, podemos ver (a partir desse T, que está na coluna de status) que o processo foi interrompido . Então, ainda está vivo, mas não está funcionando ... Pode ser retomado.

    Alguns aplicativos travarão se tiverem processos externos em andamento (como uma solicitação da Web) que podem expirar enquanto estão inativos.

por Oli 13.08.2014 / 15:56
14

Controle + Z suspende um processo ( SIGTSTP ) e Controle + C interrompe um processo ( SIGINT )

link

  

Em sistemas semelhantes ao Unix, Control + Z é o mapeamento de teclado padrão mais comum para a sequência de chaves que suspende um processo

link

  

Nos sistemas POSIX, a sequência faz com que o programa ativo receba um sinal SIGINT. Se o programa não especificar como lidar com essa condição, ele será finalizado. Normalmente, um programa que manipula um SIGINT ainda será encerrado ou, pelo menos, terminará a tarefa executada dentro dele

    
por Sleep Deprived Bulbasaur 13.08.2014 / 15:56
8

Ctrl + C é usado para matar um processo com sinal SIGINT , por outras palavras, é um educado kill .

Ctrl + Z é usado para suspender um processo enviando-lhe o sinal SIGSTOP , que é como um sinal de sono, que pode ser desfeito e o processo pode ser retomado novamente.

No entanto, quando um processo é suspenso, podemos resumi-lo novamente por fg (resume in forground) e bg (resume in background) , mas eu não consigo retomar um processo morto, que é uma diferença entre usar Ctrl + C & amp; Ctrl + Z .

Como visualizar processo suspenso?

Usando o comando jobs, a saída será:

[1]-  Stopped                 cat
[2]+  Stopped                 vi

Como matar um processo suspenso em segundo plano?

Usando o comando kill :

kill% n onde n serão números exibidos no comando jobs, então eu quero matar cat: kill %1 .

    
por nux 14.08.2014 / 09:49
6

Isso deve ajudar

  

O Ctrl + Z é usado para suspender um processo enviando-lhe o sinal SIGSTOP, que não pode ser interceptado pelo programa. Enquanto Ctrl + C é usado para matar um processo com o sinal SIGINT, e pode ser interceptado por um programa para que ele possa se auto-limpar antes de sair, ou não sair em tudo.

    
por Graham 13.08.2014 / 15:58
3

quando você pressiona ctrl + c , significa que você envia SIGINT para o seu processo. como você digita este comando: kill -SIGINT <your_pid> . Isso vai te matar seu processo. Por que você não pode vê-lo ao emitir o comando ps .
Quando você pressiona ctrl + z , significa que você envia SIGSTOP para o seu processo. como você digita este comando: kill -SIGKSTOP <your_pid> . Isso vai parar o seu processo, mas o processo ainda está vivo. Então você pode reativar seu processo enviando SIGCONT para o seu processo.

    
por P_O_I_S_O_N 14.08.2014 / 09:24
3

Para simplificar:

  • CTRL - C solicita que o programa aborte .

  • CTRL - Z força o programa a suspender e ir para o segundo plano .

    Isso permite que você continue mais tarde com o comando fg . Tarefas em segundo plano restantes são eliminadas quando você sai do shell de login.

por thomasrutter 15.08.2014 / 02:39