ctrl c vs. ctrl z com job em primeiro plano

25
Ctrl + Z pára o trabalho enquanto Ctrl + C mata o trabalho.

Por que isso? O outro jeito não faria mais sentido?

z@z-lap:~$ sleep 100&
[1] 4458
z@z-lap:~$ sleep 200&
[2] 4459
z@z-lap:~$ jobs
[1]-  Running                 sleep 100 &
[2]+  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^Z
[1]+  Stopped                 sleep 100
z@z-lap:~$ jobs
[1]+  Stopped                 sleep 100
[2]-  Running                 sleep 200 &
z@z-lap:~$ fg %1
sleep 100
^C
z@z-lap:~$ jobs
[2]+  Running                 sleep 200 &
    
por neo0 08.06.2014 / 08:24

1 resposta

46

Eu acho que você pode estar confuso sobre a notação de controle de trabalho. Notavelmente "Parado" significa que um trabalho ainda está ativo, mas que sua capacidade de processar qualquer coisa foi mantida (não é dado tempo algum à CPU para processar nada). Este é efetivamente um estado "Pausa" ou "Suspenso", embora esse não seja o termo técnico correto.

  • Ctrl C não "interrompe" uma tarefa, cancela ou mata. Tecnicamente, faz com que um sinal de interrupção seja enviado para o programa, informando-o para abortar o que está fazendo e sair imediatamente. Alguns programas ouvirão este sinal e farão algum trabalho de limpeza de emergência antes de sair. Outros não responderão ao sinal e serão subseqüentemente abortados.

  • Ctrl Z , por outro lado, "interrompe" um trabalho. Novamente, isso é feito com um sinal, mas desta vez é um sinal de 'parada' em vez de 'interrupção'. Isso efetivamente coloca em espera e retorna o controle para o shell, mas na verdade não mata o trabalho. Se você quiser que esse trabalho continue em execução, poderá emitir um comando bg para enviar o último trabalho interrompido para o segundo plano. Em seguida, ele continuará sendo executado como uma tarefa em segundo plano, como se você tivesse executado com & em primeiro lugar. Você também pode usar fg para retomar o último trabalho parado em primeiro plano (permitindo que ele continue de onde parou e permitindo que você interaja com ele novamente).

por 08.06.2014 / 08:36