Como matar um processo ou parar um programa no Linux

Quando um processo se comporta mal, às vezes você pode querer terminar ou matá-lo. Neste post, vamos explorar algumas maneiras de terminar um processo ou uma aplicação a partir da linha de comando, bem como a partir de uma interface gráfica, usando o gedit como uma aplicação de exemplo.

Usando os caracteres de linha de comando/terminação

Ctrl + C

Um problema ao invocar gedit a partir da linha de comando (se você não estiver usando gedit &) é que ele não vai liberar o prompt, de modo que a sessão da shell é bloqueada. Nesses casos, Ctrl+C (a tecla Control em combinação com ‘C’) vem a calhar. Isso terminará com gedit e todo o trabalho será perdido (a menos que o arquivo tenha sido salvo). Ctrl+C envia o sinal SIGINT para gedit. Este é um sinal de parada cuja ação padrão é para terminar o processo. Ele instrui a shell a parar gedit e retornar ao laço principal, e você receberá o prompt de volta.

$ gedit
^C

Ctrl + Z

Este é chamado de um caractere de suspensão. Ele envia um sinal de SIGTSTP para processar. Isto também é um sinal de stop, mas a ação padrão não é matar mas suspender o processo.

Irá parar (kill/terminate) gedit e retornar o prompt da shell.

$ gedit
^Z
+ Stopped gedit
$

Após o processo ser suspenso (neste caso, gedit), não é possível escrever ou fazer nada em gedit. Em segundo plano, o processo torna-se um trabalho. Isto pode ser verificado pelo comando jobs.

$ jobs
+ Stopped gedit

jobs permite controlar múltiplos processos dentro de uma única sessão da shell. Você pode parar, retomar e mover jobs para o fundo ou primeiro plano conforme necessário.

Vamos retomar gedit em segundo plano e liberar um prompt para executar outros comandos. Você pode fazer isso usando o comando bg, seguido pelo ID do job (nota da saída de jobs acima. é o ID do job).

$ bg 1
+ gedit &

Isto é semelhante a iniciar gedit com &,:

 $ gedit &

Using kill

kill permite um controle fino sobre os sinais, permitindo que você sinalize um processo especificando um nome ou um número de sinal, seguido por um ID de processo, ou PID.

O que eu gosto em kill é que ele também pode trabalhar com os IDs do job. Vamos começar com gedit em segundo plano usando gedit &. Assumindo que eu tenho um ID de trabalho de gedit do comando jobs, vamos enviar SIGINT para gedit:

 $ kill -s SIGINT %1

Note que o ID do trabalho deve ser prefixado com %, ou kill irá considerá-lo um PID.

kill pode funcionar sem especificar um sinal explicitamente. Nesse caso, a ação padrão é enviar SIGTERM, o que encerrará o processo. Execute kill -l para listar todos os nomes de sinais, e use o comando man kill para ler a página man.

Using killall

Se você não quiser especificar um ID de trabalho ou PID, killall permite especificar um processo pelo nome. A maneira mais simples de terminar gedit usando killall é:

 $ killall gedit

Isto irá matar todos os processos com o nome gedit. Como kill, o sinal padrão é SIGTERM. Ele tem a opção de ignorar caso usando -I:

$ gedit &
14852
$ killall -I GEDIT
+ Terminated gedit

Para saber mais sobre várias flags fornecidas por killall (como -u, que permite que você mate processos de propriedade do usuário) verifique a página man (man killall)

Usar xkill

Você já encontrou um problema em que um media player, como VLC, ficou cinza ou pendurado? Agora você pode encontrar o PID e matar o aplicativo usando um dos comandos listados acima ou usar xkill.

xkill permite que você mate uma janela usando um mouse. Basta executar xkill num terminal, que deve mudar o cursor do rato para um x ou um pequeno ícone do crânio. Clique em x na janela que você deseja fechar. Tenha cuidado usando xkill, embora – como explica a sua página de manual, pode ser perigoso. Você foi avisado!

Refer para a página de manual de cada comando para mais informações. Você também pode explorar comandos como pkill e pgrep.

.

Deixe uma resposta

O seu endereço de email não será publicado.