Ctrl + c não matará o processo

7

Procurei por respostas e até agora não encontrei nada para responder à minha pergunta. Eu estou atualmente fazendo login no meu servidor Ubuntu e ao executar um processo não consigo executar nenhuma das interrupções nele. Aqui está o meu stty -a:

user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;

Não tenho nada no meu .bashrc que mude as interrupções.

Isso é o mesmo para todos os usuários, incluindo o root. Eu também tentei fazer o login de diferentes locais usando terminais diferentes e toda vez que esse mesmo resultado aparece. Eu usei ssh e ssh -X para efetuar login.

Editar: localmente todas as minhas interrupções funcionam bem.

Atualização: ainda estou procurando uma resposta. Meu amigo tem exatamente o mesmo problema. O problema parece ser que, ao fazer o login (do PC, Mac, Linux), o teclado não está captando essas teclas (mesmo que mapeadas corretamente).

    
por user700786 14.02.2012 / 14:57

4 respostas

3

ctrl + c nunca mata um programa,

Isso não é o que faz.

Há um conjunto de sinais que o padrão POSIX define, estes são usados para controlar um programa em execução.

  First the signals described in the original POSIX.1-1990 standard.
  Signal     Value     Action   Comment
  ──────────────────────────────────────────────────────────────────────
  SIGHUP        1       Term    Hangup detected on controlling terminal
                                or death of controlling process
  SIGINT        2       Term    Interrupt from keyboard
  SIGQUIT       3       Core    Quit from keyboard
  SIGILL        4       Core    Illegal Instruction
  SIGABRT       6       Core    Abort signal from abort(3)
  SIGFPE        8       Core    Floating point exception
  SIGKILL       9       Term    Kill signal
  SIGSEGV      11       Core    Invalid memory reference
  SIGPIPE      13       Term    Broken pipe: write to pipe with no
  SIGTERM      15       Term    Termination signal

- link

ctrl + c envia o sinal 2 , "Interromper do teclado" para o programa que você executou de um terminal.

É inteiramente até o programa para lidar com esse sinal, ele pode fazer o que quiser sobre isso. Muitos intérpretes de linguagem de script podem lidar com isso de forma padrão, matando o script chamado e saindo normalmente.

Se você quiser que um programa saia, espeicamente de um contexto automático, o singal 15 é recomendado, o programa kill pode ser usado para enviar sinais para um processo por id (pid).

kill -15 <pid>

Tanto quanto eu saiba, o programa ainda recebe este sinal, e deve terminar o mais rápido possível assim que possível.

Se o programa ignora o sinal 15, E o programa persiste para viver (e você não está deixando de enviar o sinal devido a um erro de permissão)

kill -9 <pid>

O sinal 9, até onde eu sei, é interpretado pelo kernel (o gerenciador de tarefas e a interface de hardware). O kernel pára abruptamente o processamento do programa e des-aloca / libera todos os seus recursos.

    
por 23.09.2015 / 00:47
2

Aqui está um truque de hardcore:

Control-Z

ele suspenderá seu processo e retornará o ID do trabalho desse processo

Então:

kill -9 %1

(substitua 1 pelo seu ID de trabalho).

Nota: Porcentagem é obrigatória !, caso contrário você vai matar o seu processo de inicialização, o que significa que você irá matar o kernel e todo o sistema irá travar (então não coloque o espaço entre):

    
por 31.07.2012 / 17:21
0

Ctrl + c não mata o processo. ele apenas interromperá o processo atual de execução no meio. Para matar o processo, precisamos usar o comando "KILL"

    
por 11.07.2012 / 14:29
0

Eu encontrei esta antiga postagem no fórum sobre esse problema específico. Parece que a seqüência de interrupção padrão pode ser substituída em um arquivo de configuração separado em algum lugar.

Se você está apenas olhando para matar este processo externamente, você pode usar kill, apenas tome cuidado, pois você deve escalar kill como descrito neste artigo sobre processos de matar , ao invés de apenas pular para o mais extremo kill -9.

A Wikipedia é um excelente recurso para o programa kill . Também aqui está uma lista de sinais Unix e o que eles fazem.

    
por 18.07.2012 / 16:19