Saturday, June 19, 2021

Utilizando os comandos kill, pkill e killall


O comando kill envia um sinal especifico para um processo. O comando kill pode ser executado de várias maneiras, diretamente ou a partir de um script. Dentro do Linux, as tarefas são chamadas de processos, e cada um deles possui um número de identificação (PID) único. Para encerrar/finalizar (ou simplesmente matar) um processo utilizamos o comando kill.

Alguns exemplos em que o comando kill pode ser útil:
  •  Para interromper processos automatizados
  • Para interromper um processo que foi iniciado por acidente
  • Para interromper um processo que está utilizando muita memória
  • Para forçar a parada de qualquer processo em execução no Linux
  • Para interromper um processo sendo executado em segundo plano
Antes de seguir em frente e executar um comando kill, alguns pontos importantes a serem observados:
  • Um usuário pode matar todo o seu processo.
  • Um usuário não pode matar o processo de outro usuário.
  • Um usuário root pode eliminar o processo no nível do sistema e o processo de qualquer usuário.

Além de interromper um processo, o comando kill ainda oferece outros recursos. Por exemplo, enviar um sinal. Por padrão, é utilizado o sinal TERM para encerrar o processo de forma amigável, já utilizando a opção SIGKILL encerra abruptamente o processo, assim podendo deixar “resíduos” no sistema/memória, podendo até tornar um processo zumbi.

A sintaxe comum para o comando kill é:
kill SIGNAL PID

Todos os sinais do comando kill

Existem múltiplos sinais disponíveis no Linux que podem ser utilizados para interromper, encerrar ou pausar processos. Para exibir a lista de todos os sinais disponíveis digite:
kill -l
Este comando irá mostrar uma página do manual com diferentes sinais do comando kill e seus respectivos números. Embora existam muitos sinais disponíveis, na maioria das vezes utilizamos o SIGKILL (9) e SIGTERM (15).


O comportamento do SIGTERM é a maneira padrão e mais segura de encerrar um processo. SIGHUP é uma forma menos segura de eliminar um processo como SIGTERM. O SIGKILL é a forma mais insegura entre as três anteriores, para encerrar um processo que termina um processo sem salvá-lo.
        
Para encerrar um processo, precisamos saber o ID do processo. Um processo é uma instância de um programa. Cada vez que um programa é iniciado, um PID exclusivo é gerado automaticamente para esse processo.

Cada processo no Linux, tem um PID. O primeiro processo que começa quando o sistema Linux é inicializado é o processo init, portanto, é atribuído um valor de PID 1.

Para exibir todos os processos e, correspondentemente, seus PID atribuídos, existem algumas formas:

  • ps -A
  • ps -ef
  • ps -aux

Os comandos acima irão retornar todos os processos em execução, você pode filtrar a saída do comando utilizando o grep:
Syntax: ps -aux | grep NomeDoProcesso
Exemplo: ps -aux | grep mysqld

Na saída do comando acima o PID do processo mysqld é 511.
 
Podemos também verificar o PID do processo executando o comando abaixo caso já saiba o nome do processo:
Syntax: pidof NomeDoProcesso
Ex: pidof mysqld
Outra forma de realizar a mesma função é executar o comando pgrep:
Syntax: pgrep NomeDoProcesso
Ex: pgrep mysqld

Matar um processo através do PID - kill

Para eliminar o PID do processo mysql executado acima, use o comando kill da seguinte forma:
kill -9 511
     

Ué, mas por que o comando deu erro?

Lembrando que:
  • Um usuário pode matar todo o seu processo.
  • Um usuário não pode matar o processo de outro usuário.
Como fazer para saber quem iniciou o processo? Através do comando que foi apresentado logo acima:
 ps -aux | grep mysqld
Ele conseguimos ver que o usuário mysqld que iniciou. Somente o próprio usuário pode matar o processo ou o root.
    
Nesse caso podemos acessar o login do root digitando:
sudo su
ou
su -
Repare que ao invés de $ alterou para #, isso significa que está como root e não mais usuário normal:

            

Agora sim é possível matar o processo iniciado por qualquer usuário:
kill -9 511
          

Outra forma de executar a mesma função é:
kill -SIGTERM 511
     
  
O comando kill -9 PID é equivalente  a kill -SIGKILL PID, pode ser utilizado qualquer uma das formas.
 
É possível executar comandos com permissão de root digitando sudo COMANDO ao invés de trocar de conta.
Syntax: sudo kill -9 PID
Matar um processo através do nome do processo - pkill

Você deve estar ciente do nome do processo antes de encerrar:
Syntax: pkill NomeDoProcesso
Exemplo: pkill mysqld
            

É possível matar vários processos de uma só vez execute:
Syntax: kill PID1 PID2 PID3
              kill -9 PID1 PID2 PID3
              kill -SIGKILL PID1 PID2 PID3
Matar família de processos através do nome do processo - killall

E se um processo tiver muitas instâncias e vários processos (PID) filho, existe o comando killall. Este comando leva o nome do processo como argumento no lugar do número do processo.
Syntax: killall SIGNAL NomeDoProcesso
Exemplo: killall -9 mysqld
            

Você sempre pode verificar o status do processo se ele está em execução ou não, usando qualquer um dos comandos abaixo.
  • systemctl status mysql
  • service mysql status
  • pgrep mysql
  • ps -aux | grep mysql

Por enquanto isso é tudo. Em breve estarei aqui novamente com outro tópico.

    $ sudo poweroff

    

0 comments:

Post a Comment