O que há de diferente entre Ctrl + Z e Ctrl + C na linha de comando do Unix?

181

Estou usando o Mac OS X Terminal. E eu uso Ctrl + Z ou Ctrl + C para parar alguns programas. Mas percebi que não sei exatamente o que eles estão fazendo. Quais são eles e qual a diferença entre eles?

This question was a Super User Question of the Week.
Read the March 13, 2011 blog entry for more details or submit your own Question of the Week.

    
por Eonil 27.03.2011 / 01:39

6 respostas

238

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

Se você suspender um processo, isso será exibido no shell para informar que ele foi suspenso:

[1]+  Stopped                 yes

No entanto, se você matar um, você não verá nenhuma confirmação além de ser descartada para um prompt do shell. Quando você suspende um processo, você também pode fazer coisas extravagantes com ele. Por exemplo, executando isso:

fg

Com um programa suspenso, ele será levado de volta ao primeiro plano.

E executando o comando

bg

Com um programa suspenso permitirá que ele seja executado em segundo plano (a saída do programa ainda irá para o TTY, no entanto).

Se você quer matar um programa suspenso, você não precisa trazê-lo de volta com fg primeiro, você pode simplesmente fazer o comando:

kill %1

Se você tiver vários comandos suspensos, execute

jobs

irá listá-los assim:

[1]-  Stopped                 pianobar
[2]+  Stopped                 yes

Usando %# , onde # é o número da tarefa (aquele entre colchetes da jobs output) com bg , fg ou kill , pode ser usado para executar a ação nesse trabalho.

    
por 27.03.2011 / 03:15
22

Ctrl + Z suspende o processo com o SIGTSTP, você pode continuar mais tarde. Ctrl + C mata o processo com SIGINT, que termina o processo, a menos que seja manipulado / ignorado pelo alvo, então você não pode retomar o processo. Há também um SIGSTOP que pode ser enviado por kill() e que o processo não pode interceptar. O SIGCONT é a contraparte do SIGSTOP e do SIGTSTP que suspende o processo.

    
por 27.03.2011 / 01:43
17

CTRL + Z pára (pausa) um trabalho

CTRL + C termina um trabalho

com CTRL + C você não pode retomar o processo, mas com CTRL + Z o trabalho pode ser retomado apenas digitando o comando promt:

fg %1

se você tem vários processos em pausa, então você deve fazer

jobs

para ver a saída e selecionar o número apropriado para retomar, por exemplo,

fg %3

retoma o terceiro trabalho na lista. Você também pode ter trabalhos sendo executados em segundo plano com

bg %n

onde n é o número do trabalho.

    
por 27.03.2011 / 13:52
3
Cntrl + Z pause the currently running process. 

e

Cntrl + C simply terminates the running process.

Usando Cntrl + C você não pode retomar o processo. onde usando Ctrl + Z você pode retomar o processo.

use fg% 1 para retomar o processo.

    
por 13.03.2014 / 07:48
3

CTRL + Z para (pausa) um trabalho

CTRL + C termina um trabalho

Com CTRL + C você não pode retomar o processo, mas com CTRL + Z o trabalho pode ser reiniciado apenas digitando no prompt de comando:

fg %1

Se você tiver vários processos pausados, faça

jobs

para ver a saída.

    
por 03.07.2014 / 17:57
2

As respostas anteriores estão corretas, mas por alguma razão desconhecida Ctrl-Z suspende todos os processos filhos também, mas killall -SIGSTOP ... apenas suspende o processo principal (pai) e deixa os filhos rodarem como quiserem.

    
por 26.02.2013 / 18:19