Um curso intensivo para matar programas de linha de comando / modo de texto
Para elaborar o comentário do @ AFH, se "SRM" for um programa de console (interface de linha de comando) e você executá-lo a partir de um terminal, pressione Ctrl-z
, pois isso faz com que seu terminal envie o processo em primeiro plano gerencia esse sinal SIGSTOP
e o envia para o segundo plano. Você pode então "trazê-lo de volta" executando o comando fg
shell - é uma parte do chamado "job control" implementado por shells interativos e significa trazer o processo em segundo plano para primeiro plano (daí "fg") que inclui o envio o processo do sinal SIGCONT
entre outras coisas.
Claro, para interromper um processo, pare. Em sistemas Unix-y, incluindo sistemas operacionais baseados em Linux, isso é feito enviando ao processo um dos sinais especiais - geralmente SIGTERM
ou SIGINT
. Acertar Ctrl-c
em um terminal que executa um processo faz com que o processo envie o sinal SIGINT
. O programa kill
pode ser usado para enviar sinais arbitrários de processos arbitrários.
O problema com o uso de kill
é que, para a maioria de seus usos, é necessário
o usuário conhecer o chamado "PID" do processo para enviar o sinal para.
O PID é um P intermediário ID - um número inteiro ≥ 1 exclusivo entre
todos os processos atualmente gerenciados pelo sistema operacional.
O controle de tarefas do shell facilita, já que tem certos mnemônicos para
referem-se aos processos que gerencia: se você conhece o ativo atual
processo pressionando Ctrl-z
, você pode usar o comando jobs
para ver a lista de processos gerenciados por esse shell.
Por exemplo, acabei de suspender uma instância de mutt
e execute jobs
depois disso; aqui está o que vejo:
~$ jobs
[1]+ Stopped mutt
Observe que [1]+
bit.
O 1
é o identificador de trabalho atribuído a esse processo pelo shell.
O +
é um "identificador" para se referir ao último processo em segundo plano.
Agora, você pode usar %1
ou %+
com o comando kill
para se referir a esse processo, como em
$ kill %1
ou
$ kill %+
… e todos eles enviarão SIGTERM
para esse único processo em segundo plano.
É assim que você pode matar um programa de consoles mal comportado.
Mais sobre singles Observe que os sinais SIGINT
e SIGTERM
podem ser "manipulados"
pelo processo que recebeu um deles.
Isso permite que o processo execute determinadas ações de limpeza antes
desistir.
Mas às vezes um processo pode "travar" - digamos, executando uma interminável
loop em uma CPU devido a um bug de programação ou por ficar preso tentando
ler / escrever de / para um arquivo em algum recurso "morto", como desconectado
compartilhamento de rede.
Nestes casos, a entrega de SIGINT
ou SIGTERM
normalmente não será
ser capaz de "desencadear" o processo.
Para lidar com esses casos, existe um sinal especial, SIGQUIT
,
que tem um número bem conhecido atribuído a ele, "9".
Enviando um processo, este sinal apenas faz com que o sistema operacional forque nuke
processo sem que tenha qualquer chance de intervir.
É por isso que você provavelmente viu que kill -9 $pid
encantation
em alguns documentos.
Outras opções
Existem outras opções, é claro.
Primeiro, existem programas "fáceis de usar", como htop
, que
apresentar-lhe uma lista pesquisável de processos em execução e permitir-lhe
para enviar qualquer um deles um sgnal de escolha.
Ambientes gráficos de desktop - como GNOME, XFCE, KDE e outros - geralmente fornecer um aplicativo GUI para fazer o mesmo.
Em segundo lugar, existem maneiras mais "hacky" de lidar com comportamentos inadequados processos para os casos em que esses "gerenciadores de tarefas" estão indisponíveis ou não se encaixa na conta por algum motivo. Aqui estão alguns deles em nenhuma ordem particular:-
O utilitário
xkill
(no Debian e seu derivado está em o pacotex11-utils
), quando executado, mostra uma cruz em diagonal cursor com o qual você deve selecionar qualquer janela clicando nela, exkill
forçará a desconexão do processo que possui essa janela do servidor X (o programa que renderiza toda a sua GUI).O efeito dessa ação difere entre os processos, mas se você
xkill
uma janela do terminal ele enviará o sinalSIGHUP
aos processos que gerencia, e isso geralmente os faz desistir. -
O utilitário
pkill
(no Debian e seu derivado está em o pacoteprocps
) pode ser usado para enviar um sinal para um conjunto de processos cujo nome corresponde a uma determinada string.Então, se você quiser matar um processo
srm
, saiba que está sendo executado no seu sistema, você pode executar$ pkill -9 srm
para derrubar todos os processos denominados srm
em execução no sistema.