Se você ainda é um usuário do Windows, certamente já utilizou a ferramenta de gerenciamento de processos (ou Gerenciador de Tarefas) para fechar um programa que travou ou que estivesse consumindo RAM demasiadamente. No ambiente Linux, utilizamos o comando kill para “matar” esses processos.
O comando kill oferece opções adicionais ao encerramento de processos, detalhe que o torna mais completo, flexível e conveniente aos usuários. Os comandos do Linux, vale ressaltar, não se caracterizam por colocar limites, mas sim por derrubá-los — muitas delas existentes nos sistemas operacionais de prateleira.
Contudo, no caso do comando kill, ele está disponível para outros sistemas operacionais, como os populares Microsoft Windows e Mac. Ou seja, aprendê-lo pode ser útil para os variados tipos de usuários.
Portanto, neste artigo, você adquirirá as noções básicas do comando kill: desde o conceito (e os sinais) até a exemplos práticos de uso nos principais sistemas operacionais. Vamos começar?
O que é o comando kill?
Em meio a tantos comandos existentes no sistema Linux, o comando kill se caracteriza como um gerenciador de processos que, por meio de sinais, permite ao usuário escolher entre diversas ações direcionadas às tarefas.
Na prática, ele nos fornece uma lista contendo vários sinais que podemos utilizar. Mas o que é possível fazer com os processos usando o comando? Resposta: encerrar, bloquear, reiniciar, abortar execução, emitir alertas e muito mais.
A seguir, vejamos os sinais que podem ser emitidos pelo comando kill.
Quais são os sinais que o comando kill envia ao sistema?
Os sinais são macros acionáveis pelo comando kill e, ao todo, ele disponibiliza 64. São elas:
1) SIGHUP: costuma ser utilizado para reiniciar processos, bem como desconectar um processo do processo pai;
2) SIGINT: interrompe ou para um processo;
3) SIGQUIT: realiza o despejo de memória de um processo;
4) SIGILL: emite alerta quando um processo executa funções proibidas, desconhecidas ou falhas;
5) SIGTRAP: executa a depuração do processo mediante ação ou condição;
6) SIGABRT: aborta um processo;
7) SIGBUS: é um sinal emitido quando um processo causa erro no barramento, como, por exemplo, quando usa endereços físicos falsos;
8) SIGFPE: é acionado em decorrência de falhas específicas de emulador;
9) SIGKILL: força a parada imediata de um processo;
10) SIGUSR1: aponta uma condição definida pelo usuário por meio de programação;
11) SIGSEGV: sinal enviado a um processo quando este viola acesso;
12) SIGUSR2: idem ao SIGUSR2;
13) SIGPIPE: segundo o manual do programador Linux, este sinal é emitido quando um processo tenta gravar em um pipe que não tem um final conectado a um leitor;
14) SIGALRM: é um sinal enviado quando um cronômetro em tempo real ou horário expira;
15) SIGTERM: funciona de maneira similar ao SIGKILL, mas não força a parada do aplicativo;
17) SIGCHLD: é recebido pelo processo pai quando ocorre a perde do seu processo filho, limpando os recursos que ele utilizou;
18) SIGCONT: retoma um processo pausado pelo sinal SIGTSTP (ou SIGSTOP);
19) SIGSTOP: faz o sistema operacional pausar um processo;
20) SIGTSTP: solicita ao terminal a interrupção temporária do processo;
21) SIGTTIN: é emitido quando um processo tenta ler de um terminal de sistema;
22) SIGTTOU: é emitido quando um processo tenta escrever de um terminal;
23) SIGURG: envia um sinal a processos que tenham dados urgentes (ou grandes) a serem lidos;
24) SIGXCPU: condiciona o processo a salvar o progresso e fechar antes que o sistema mate-o;
25) SIGXFSZ: ocorre quando se tenta violar o limite de um sistema de arquivos (FAT32, por exemplo, que tem o limite de 4GB);
26) SIGVTALRM: é enviado quando o tempo de CPU usado pelo processo atinge o limite;
27) SIGPROF: é enviado quando o tempo de CPU usado pelo processo ou pelo sistema em nome do processo atinge o limite;
28) SIGWINCH: este sinal é acionado quando um processo está em um terminal cujo tamanho é modificado;
29) SIGPOLL (ou SIGIO): é recebido quando um processo causa eventos de entrada e saída assíncronos
30) SIGPWR: é enviado aos processos quando ocorrem falhas de energia, contanto que o sistema ainda esteja ligado;
31) SIGSYS: sinal emitido a processos que fornecem parâmetros inválidos ao sistema;
32~49) SIGRTMIN: são sinais em tempo real definidos pelo usuário e programados no código-fonte do kernel do Linux. Além disso, ele varia de SIGRTMIN a SIGRTMIN+15 na maioria dos sistemas;
50~64) SIGRTMAX: idem ao SIGRTMIN, porém a variação começa por SIGRTMAX-14 e termina em SIGRTMAX. Em ambos os casos, é necessário sólido conhecimento nas linguagens C e C++.
Como localizar processos a serem eliminados?
O primeiro passo para encerrar uma tarefa é, evidentemente, localizá-la no sistema. Fazer a busca por meio do comando kill é muito fácil e pode ser feito usando dois comandos: top e ps.
O primeiro é uma ferramenta que fornece uma lista com todos os processos em execução — é como o gerenciador de tarefas, do Windows.
Já o comando ps é interessante para aplicar filtros de pesquisa. Por exemplo, se a intenção é de encerrar o navegador Firefox, você pode acionar o comando:
ps aux | grep firefox
Isso fará com que todos os processos associados ao Firefox sejam listados. Só para não passar em branco, o aux indica uso de três opções:
- a = exibe processos para todos os usuários;
- u = mostra o processo do usuário que está usando a máquina; e
- x = imprime na tela os processos relacionados a aplicações gráficas, ou seja, não relacionadas ao terminal.
Agora que podemos facilmente localizar um processo, vejamos como encerrá-lo.
Que tipos de tarefas podem ser realizadas a partir do comando kill?
Para elucidar o funcionamento prático do comando kill, elencamos cinco exemplos básicos de como ele é utilizado.
Encerrar processos
Para matar um processo pelo comando kill é necessário que se tenha em mãos o nome ou a ID dele.
Se você chegou a executar o comando ps e localizou a tarefa, digite:
pgrep firefox
11958
No exemplo acima, o pgrep foi utilizado para encontrar o número identificador do processo. Logo, o ID pode ser digitado e, assim, ser mais preciso ao matar o processo.
Para fazê-lo, basta digitar (conforme o exemplo):
kill 11958
Entretanto, se preferir matar o processo a partir do nome, digite:
pkill firefox
Pronto!
Matar múltiplos processos
Supondo que você queira eliminar diversos processos de uma só vez, utilize um só comando para executar a tarefa. Exemplo:
kill -9 ID1 ID2 ID3 ID4
Nesse caso, usamos o sinal 9 (kill) e listamos os identificadores de cada processo.
Exibir uma lista com todos os sinais do comando kill
Como o comando kill tem dezenas de sinais, às vezes, principalmente para quem estuda o comando, é interessante contar com uma lista completa.
Para isso, apenas digite kill -l. Entretanto, se preferir que os números dos sinais sejam acrescentados à lista, digita kill -L. Muito fácil, não é mesmo?
Identificar o sinal que está sendo encaminhado a um processo
Para ativar o modo de detalhamento (verbose) para que o terminal exiba os sinais que estão sendo encaminhados, é necessário usar a seguinte sintaxe:
kill –verbose ID do processo
Vejamos um pequeno exemplo de como isso ocorre na prática.
kill –verbose 13886
sending signal 15
Ou seja, o terminal indicou que foi utilizado o sinal 15 para determinado processo. Ao consultarmos a lista de sinais por meio do comando kill -l, veremos que foi utilizando o SIGTERM, usado para encerrar processos sem forçá-los.
Como executar o comando kill nos sistemas Windows e macOS?
Gostou das diversas possibilidades que o comando kill proporciona, mas ainda não utiliza uma distro do Linux? Então confira as dicas, abaixo, para utilizá-lo no Windows. Se você utiliza Mac o comando kill permanece o mesmo.
No prompt do Windows, você pode forçar a parada de um processo usando dois comandos: TSKILL e TASKKILL.
O primeiro aciona a funcionalidade básica de encerramento de aplicativos, isto é, equivalente ao botão “Finalizar processo”, do gerenciador de tarefas. Por sua vez, o TASKKILL oferece mais opções ao usuário — no prompt de comando, digite taskkill /?para listá-las.
Concluindo: o comando kill se caracteriza pela versatilidade e, também, pelo amplo leque de opções disponíveis ao usuário. Devido ao seu fator multiplataforma, você pode começar a testá-lo mesmo que ainda não tenha escolhido a sua distro do Linux. Aliás, o que está achando de utilizar os comandos no terminal?
Caso esteja curtindo o tema e, consequentemente, se interesse em aprender comandos em níveis mais avançados, recomendo que baixe (gratuitamente) este ebook do nosso curso Linux Ubuntu!