Como interromper processos do terminal Linux

Matar um processo às vezes é a única maneira de se livrar dele. Apesar do nome áspero, “matar” um processo significa apenas “forçá-lo a encerrar”. Veja como fazer isso na linha de comando do Linux ou macOS.

O que é um processo?

Programas em execução como o seu navegador da web, processos em segundo plano associados ao seu ambiente de área de trabalho e serviços do sistema Linux são todos processos.

Você pode agrupar processos em dois grupos:

Os processos de primeiro plano são aqueles que foram iniciados ou iniciados por um usuário. Eles podem estar em uma janela de terminal ou podem ser um aplicativo gráfico.
Os processos em segundo plano são todos os processos iniciados automaticamente e não têm nenhuma interação com os usuários. Eles não esperam contribuições dos usuários nem apresentam resultados ou saídas a eles. Processos em segundo plano são coisas como serviços e daemons.

Se os processos de primeiro plano são a frente da equipe do teatro e dos atores, os processos de segundo plano são a equipe de bastidores “nos bastidores”.

Quando os processos se comportam incorretamente ou funcionam mal, eles podem consumir muito tempo da CPU, consumir sua RAM ou entrar em um loop computacional rígido e não responder. Os aplicativos gráficos podem se recusar a responder aos cliques do mouse. Os aplicativos de terminal podem nunca retornar você ao prompt de comando.

A Resposta Humana

“Matar” um processo significa apenas “forçar o processo a encerrar”. Isso pode ser necessário se o processo se recusar a responder.

O Linux fornece os comandos kill, pkill e killall para permitir que você faça exatamente isso. Esses comandos podem ser usados ​​com qualquer tipo de processo, gráfico ou linha de comando, primeiro plano ou plano de fundo.

  Como sincronizar o Todoist com o Gnome To Do App no ​​Linux

O comando matar

Para usar o kill, você deve saber o ID do processo (PID) do processo que deseja encerrar. O comando ps pode ser usado para encontrar o PID de um processo.

Para que o ps pesquise todos os processos, use a opção -e (todos os processos). Canalizar a saída por meio de menos é aconselhável, vai haver um pouco disso. Digite ps, um espaço, -e, um espaço, | (uma barra vertical), outro espaço e digite menos. Pressione Enter para executar o comando.

ps -e | less

Isso lhe dará uma lista de processos semelhante à captura de tela abaixo. Você pode pesquisar para a frente em menos usando a tecla / e você pode pesquisar para trás usando a tecla? chave.

Para se familiarizar com o processo no qual você está interessado, canalize a saída de ps por meio de grep e especifique o nome – ou parte do nome – do processo.

ps -e | grep shutter

Depois de localizar o PID do processo que deseja encerrar, passe-o para o comando kill como parâmetro. Para encerrar o processo de obturação identificado pelo comando anterior, use este comando:

kill 2099

O comando matar é um assassino silencioso – ele não fornece nenhum feedback se for bem-sucedido.

O Comando pkill

O comando pkill permite eliminar um processo – ou processos – pelo nome. Você não precisa identificar o processo pelo PID. Para usar o pkill, você fornece um termo de pesquisa que o pkill usa para verificar a lista de processos em execução. Os processos de correspondência são encerrados. Portanto, você precisa ter certeza de que o termo de pesquisa foi escrito corretamente.

Como rede de segurança, você pode usar o comando pgrep antes de usar o comando pkill. O comando pgrep também aceita um termo de pesquisa. Ele listará o PID de cada processo que corresponda ao termo de pesquisa. Isso é seguro porque o pgrep não emitirá nenhum sinal de eliminação para os processos e, se você digitar incorretamente o termo de pesquisa, não eliminará outro processo por engano. Você pode ter certeza de que o termo de pesquisa foi pensado corretamente antes de passá-lo para pkill. Tanto pkill quanto pgrep tratam o termo de pesquisa da mesma maneira. Seu tratamento é tão semelhante que eles compartilhe a mesma página de manual.

  3 maneiras de apagar com segurança um disco rígido no Linux

Suponhamos que haja um processo com “subq” em seu nome. Usaremos o ps -u dave | comando grep para espiar por trás da cortina. Você pode ver que “subq” corresponderá a esse processo e apenas a esse processo. Isso foi só para vocês verem o nome completo do processo.

ps -u dave | grep subq

Vamos supor que nosso usuário não tenha feito isso; tudo o que eles sabem é que o nome do processo contém a substring “subq.” Eles usam o pgrep para verificar se há apenas uma correspondência para o termo de pesquisa. Em seguida, eles usam esse termo de pesquisa com pkill.

pgrep subq
pkill subq

Você pode usar o pkill para matar vários processos de uma vez. Aqui, o usuário executa o pgrep para verificar quantos processos o Chrome iniciou. Eles usam pkill para matar todos eles. Eles então verificam com o pgrep se todos foram removidos.

pgrep chrome
pkill chrome
pgrep chrome

Se vários processos com o mesmo nome estiverem em execução, mas você não quiser eliminá-los todos, você pode usar o pgrep com a opção -f (linha de comando) para identificar qual processo é qual. Um exemplo simples seria dois processos de ping. Você quer matar um deles, mas não o outro. Você pode usar suas linhas de comando para distingui-los. Observe o uso de aspas para quebrar o parâmetro da linha de comando.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

O comando killall

Aviso: Nos sistemas operacionais Solaris e OpenIndiana, o comando killall matará todos os processos que pertencem a você. Se você estiver como root ou se tiver executado o sudo killall, reinicie o computador! Durante a pesquisa para este artigo, esse comportamento foi confirmado com a versão mais recente do OpenIndiana Hipster 2018.10.

  Como fazer backup das configurações da área de trabalho do LXQt no Linux

O comando killall opera de maneira semelhante ao comando pkill, mas com uma diferença específica. Em vez de passar um termo de pesquisa para o comando, você deve fornecer o nome exato do processo.

Você não pode fornecer uma correspondência parcial para um nome de processo; você deve fornecer o nome completo do processo, conforme mostrado:

killall shutt
killall shutter

A opção -y (mais jovem que) permite eliminar processos que estão em execução há menos de um período especificado. O período é dado em números seguidos por uma destas unidades:

s (segundos)
m (minutos)
h (horas)
d (dias)
w (semanas)
M (meses, nota, “M” maiúsculo)
y (anos)

Para encerrar um processo chamado ana que acabou de ser iniciado e deixar qualquer instância anterior de ana em execução, você poderia usar os seguintes parâmetros com killall, se tivesse reagido em dois minutos:

killall -y 2m ana

A opção -o (mais antigo que) permite eliminar processos que estão em execução por mais tempo do que um período especificado. Este comando eliminará todas as conexões ssh que estão em execução por mais de um dia:

killall -o 1d sshd

Não seja muito feliz no gatilho

Esses comandos permitirão que você identifique e finalize processos errados com precisão e segurança corretamente.

Sempre seja cauteloso. Primeiro, certifique-se de que o processo que você está prestes a matar é realmente o que você deseja. Em segundo lugar, verifique novamente – seja cuidadoso e certifique-se de que o processo-alvo seja aquele que você deseja encerrar. Prossiga com o encerramento do processo quando estiver satisfeito.