O que fazer quando o Ctrl-C não mata o trabalho em execução?

91

Às vezes, os processos ignoram o sinal SIGINT enviado por Ctrl - C no Bash. Por exemplo, man e vi . Supondo que você não queira ler o manual ou ler o manual sobre como sair do processo de execução, existe alguma sequência de teclas que sempre funcione (sem sair do terminal)?

    
por Olivier Lalonde 20.11.2010 / 12:47

7 respostas

124

Envie o sinal SIGQUIT com Ctrl + \ .

.. $ sleep 10
^\Quit

→ Isso é equivalente a kill -3 pid . Programas executados no espaço do usuário não ignoram sigquit.

Existe também um conjunto de atalhos de teclado Magic SysRq . Um dos mais interessantes é este: Alt + SysRq + k . Ele mata todos os processos no console virtual atual. Se um de seus ttys estiver completamente e totalmente quebrado, isso pode ser usado para voltar . No tty rodando o X.org, ele pode ser usado para matar X sem piedade.

A chave SysRq é, na maioria dos teclados, a mesma que a tecla Print. No meu notebook, ele pode ser chamado usando a tecla Fn; Ou seja Alt → Fn → Imprimir → k nessa ordem.

Aqui estão alguns dos atalhos básicos de gerenciamento de processos:

  • Ctrl + Z : pausa uma processo (mais bg para continuar em segundo plano, fg para aumentar para primeiro plano)
  • Ctrl + C : educadamente peça ao processo para desligar agora
  • Ctrl + \ : mata impiedosamente o processo que é atualmente em primeiro plano
  • Alt + SysRq + s : Grava dados no disco (sempre faça isso antes de matar qualquer coisa importante)
  • Alt + SysRq + s , k : mata impiedosamente todas as correntes processos em um determinado console virtual
  • Alt + SysRq + s , b : reinicializao impied sem desmontar,
  • Alt + SysRq + r , e , i , s , u , b : com segurança r eboot e ven i f o sistema s é u tterly b roken,

Nota: Ctrl + Z , em contraste com Ctrl + C e Ctrl + \ , também funciona para man , vi , less e similares.

Em caso de dúvida, o procedimento seguido quase sempre funcionará:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^ Z indica, é claro, que Ctrl + Z foi pressionado.

Para uma visão mais aprofundada sobre shells e terminais, veja também minhas respostas em:

por Stefano Palazzo 20.11.2010 / 13:07
13

Você pode tentar Ctrl + \

    
por Benjamin 20.11.2010 / 13:06
8

Às vezes, o CTRL + C é enviado para o programa ou canal de entrada errado. Isso é especialmente comum com editores como vi , com comandos com saída canalizada, comandos bash complexos envolvendo loops, etc.

Uma solução simples e rápida é suspender o trabalho CTRL + Z e depois eliminá-lo pelo número do trabalho: kill %1 ou kill -9 %1 , etc.

    
por tylerl 20.11.2010 / 21:18
5
  • Experimente um destes:

    Ctrl + 4

    Ctrl + \

  • Ou:

    Ctrl + Z e, em seguida, execute:

    kill %1

Onde %1 é o número de trabalho que foi retornado quando você pressionou Controle - Z . Adicione -9 para forçar a eliminação.

Quando você está no console de texto, você também pode tentar: Ctrl - SysRq . O kernel deve matar o processo.

Ou SysRq - k , mata todos os processos no console virtual atual (pode também matar programas X e svgalib).

% bl0ck_qu0te%

Veja: Chave mágica do SysRq e suas combinações de comandos.

    
por kenorb 01.10.2012 / 13:47
3

Para sair do man , use q Para deixar o vi , use :q

    
por antivirtel 20.11.2010 / 23:46
-1

Tente Ctrl + Alt + Backspace

Se você está usando o Ubuntu 10.04, você quer ativar esta chave para funcionar.

Para ativar Controle - Alt - Backspace

Sistema Goto - > Preferências - > Teclado

Selecione a guia Layouts e clique nas Opções de layout .

Selecione Sequência de teclas para matar o servidor X e habilite Controle + Alt + Backspace .

Nota:

Pressionando Ctrl - Alt - Backspace reiniciará seu servidor X.

    
por karthick87 20.11.2010 / 12:56
-2

É possível que você tenha alterado o atalho da cópia de:

CTRL + SHIFT + C

Para

CTRL + C

Dessa forma, quando você tenta matar um processo, a CTRL + C não funciona.

Tente substituir o atalho de cópia para CTRL + SHIFT + C .

    
por Minter 20.11.2016 / 20:36