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
.
.