Controle de Processos Linux com o Comando kill

Controle de Processos Linux com o Comando kill

O comando kill é uma ferramenta fundamental em sistemas operacionais baseados em Unix, como o Linux, para interagir com processos em execução. Sua principle função é enviar sinais a um ou mais processos identificados por seus IDs (PIDs). Se nenhum sinal for explicitamente especificado, o comando kill envia por padrão o sinal SIGTERM (Sinal de Término), que solicita ao processo que encerre suas operações de forma controlada.

Para visualizar a lista completa de sinais disponíveis no seu sistema, pode-se usar a opção -l. Sinais frequentemente utilizados incluem HUP, INT, KILL, STOP, CONT e o sinal especial 0. Existem três maneiras principais de especificar um sinal:

  • Pelo seu número, por exemplo, -9.
  • Com o prefixo SIG, como -SIGKILL.
  • Sem o prefixo SIG, por exemplo, -KILL.

Valores de PID negativos indicam um ID de grupo de processos. Se um grupo de processos for alvo, todos os processos dentro desse grupo receberão o sinal. Um caso especial é o PID -1, que instrui o sistema a enviar o sinal a todos os processos, exceto o próprio processo kill e o processo init (PID 1), que é o ancestral de todos os processos no sistema.

Sintaxe Básica

kill [opções] <PID>...
kill -[Sinal | s Sinal] <PID>...
kill -l | --list[=<Sinal>] | -L | --table

Opções e Argumentos

  • -s <Sinal>, --signal <Sinal>: Especifica o sinal a ser enviado. Pode ser o nome do sinal (com ou sem prefixo SIG) ou seu número. Exemplos: -SIGTERM, -TERM, -15.
  • <PID>: O identificador numérico do processo. Para descobrir o PID de um processo, você pode usar o comando ps. Frequentemente, ps é combinado com grep para filtrar processos específicos, como ps aux | grep meu_servidor.
  • -l, --list[=<Sinal>]: Lista os nomes dos sinais disponíveis. Com --list=<Sinal>, converte um número de sinal para seu nome correspondente.
  • -L, --table: Exibe uma tabela com os nomes e números dos sinais disponíveis.

Sinais Comuns e Suas Funções

É importante notar que nem todos os sinais podem ser suportados por todos os sistemas, ou alguns podem estar desabilitados. Os sinais 1, 3, 9 e 15 são universalmente suportados e os mais utilizados. Os sinais não servem apenas para encerrar aplicações; eles também podem pausar, continuar ou até mesmo reiniciar processos, desempenhando um papel crucial na segurança e gerenciamento de software.

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

  • SIGHUP (1): Sinal de "hang-up". Utilizado para notificar processos que o terminal de controle foi fechado. Pode ser configurado por programas para recarregar arquivos de configuração sem encerrar o processo.
  • SIGINT (2): Sinal de interrupção. Equivalente a pressionar Ctrl+C. Solicita que o processo termine, mas o processo pode ignorá-lo.
  • SIGQUIT (3): Sinal de "quit". Semelhante a SIGINT, mas geralmente gerado por Ctrl+\. Além de encerrar o processo, normalmente gera um arquivo core dump para depuração.
  • SIGILL (4): Sinal de instrução ilegal. Enviado quando um processo tenta executar uma instrução de máquina inválida ou desconhecida.
  • SIGTRAP (5): Sinal de trap. Usado principalmente para depuração, indicando que uma condição de trap foi atingida.
  • SIGABRT (6): Sinal de abortar. Emitido pelo próprio processo para indicar um erro fatal e abortar a execução.
  • SIGBUS (7): Erro de barramento. Enviado quando um processo tenta acessar uma parte inválida da memória física.
  • SIGFPE (8): Erro de ponto flutuante. Sinalizado quando ocorre uma exceção aritmética, como divisão por zero.
  • SIGKILL (9): Sinal de morte incondicional. Força o processo a terminar imediatamente. Não pode ser capturado, ignorado ou bloqueado pelo processo.
  • SIGUSR1 (10): Sinal definido pelo usuário 1. Uso arbitrário para comunicação entre processos, conforme programado.
  • SIGSEGV (11): Violação de segmento. Ocorre quando um programa tenta acessar uma área de memória à qual não tem permissão de acesso.
  • SIGUSR2 (12): Sinal definido pelo usuário 2. Uso arbitrário, similar ao SIGUSR1.
  • SIGPIPE (13): Pipe quebrado. Enviado quando um processo tenta escrever em um pipe sem um leitor associado.
  • SIGALRM (14): Alarme. Enviado ao processo quando um temporizador de alarme expira.
  • SIGTERM (15): Sinal de término. Solicita um encerramento gracioso do processo. O processo pode capturá-lo, ignorá-lo e realizar limpeza antes de sair.
  • SIGCHLD (17): Filho terminado. Enviado a um processo pai quando um de seus processos filhos termina ou muda de estado.
  • SIGCONT (18): Continuar. Retoma a execução de um processo que foi pausado (por SIGSTOP ou SIGTSTP).
  • SIGSTOP (19): Parar incondicionalmente. Pausa a execução de um processo. Não pode ser ignorado pelo processo.
  • SIGTSTP (20): Parar de terminal. Semelhante a Ctrl+Z. Solicita que o processo pare temporariamente, mas pode ser ignorado.
  • SIGTTIN (21): Leitura de terminal em segundo plano. Enviado a um processo em segundo plano que tenta ler do terminal.
  • SIGTTOU (22): Escrita de terminal em segundo plano. Enviado a um processo em segundo plano que tenta escrever no terminal.
  • SIGURG (23): Dados urgentes disponíveis. Indica a chegada de dados urgentes em um socket.
  • SIGXCPU (24): Limite de CPU excedido. Enviado quando um processo excede o tempo de CPU alocado. Pode ser um aviso antes de um SIGKILL.
  • SIGXFSZ (25): Limite de tamanho de arquivo excedido. Enviado quando um processo tenta criar ou expandir um arquivo além do limite de tamanho.
  • SIGVTALRM (26): Alarme de tempo virtual. Enviado quando o tempo de CPU virtual do processo (tempo gasto executando o próprio código) expira.
  • SIGPROF (27): Alarme de tempo de perfil. Enviado quando o tempo de CPU do processo e o tempo de CPU do sistema em nome do processo expiram.
  • SIGWINCH (28): Mudança de tamanho da janela. Enviado ao processo em um terminal quando o tamanho da janela do terminal muda.
  • SIGIO (29): Sinal de I/O disponível. Também conhecido como SIGPOLL em alguns sistemas, indica que uma operação de I/O assíncrona foi concluída ou há dados disponíveis.
  • SIGPWR (30): Falha de energia. Enviado pelo sistema em caso de falha de energia, se ainda estiver em execução.
  • SIGSYS (31): Chamada de sistema ruim. Enviado quando um processo fornece um argumento inválido para uma chamada de sistema.
  • SIGRTMIN* / SIGRTMAX*: Sinais de tempo real. Uma série de sinais definidos pelo usuário que variam entre sistemas. São programáveis no kernel e têm prioridade sobre os sinais padrão.
  • SIGEMT (descontinuado em Linux): Indica falha de hardware definida pela implementação.
  • SIGINFO (descontinuado em Linux): Sinal de status. Enviado quando um terminal solicita informações de status do processo.
  • SIGLOST (descontinuado em Linux): Indica perda de arquivo bloqueado.

Exemplos de Uso do Comando kill

Para ver a lista completa de sinais e seus números:

kill -l

Para exibir uma tabela detalhada com os nomes e números dos sinais:

kill -L

Para recarregar a configuração de um serviço (usando SIGHUP, sinal 1). Suponhamos que o PID do serviço seja 4567:

kill -HUP 4567
# Ou alternativamente:
kill -1 4567

Solicitar que um processo termine de forma elegante (usando SIGTERM, sinal 15). Este é o padrão se nenhum sinal for especificado. O processo (PID 9876) tem a oportunidade de salvar dados e liberar recursos:

kill -TERM 9876
# Ou simplesmente:
kill 9876
# Ou explicitamente:
kill -15 9876

Interromper a execução de um programa (similar a Ctrl+C, usando SIGINT, sinal 2). Para o processo com PID 1234:

kill -INT 1234
# Ou:
kill -2 1234

Encerrar um processo e gerar um core dump para depuração (usando SIGQUIT, sinal 3). Para o processo com PID 5678:

kill -QUIT 5678
# Ou:
kill -3 5678

Forçar o encerramento imediato e incondicional de um processo (usando SIGKILL, sinal 9). Este sinal não pode ser ignorado e deve ser usado com cautela, como último recurso, para o processo com PID 3210:

kill -KILL 3210
# Ou:
kill -9 3210

Pausar a execução de um processo (usando SIGSTOP, sinal 19). O processo com PID 7890 será suspenso e não consumirá recursos da CPU:

kill -STOP 7890
# Ou:
kill -19 7890

Continuar a execução de um processo que foi pausado (usando SIGCONT, sinal 18). Este sinal só é eficaz para processos que estão atualmente suspensos. Para o processo com PID 7890:

kill -CONT 7890
# Ou:
kill -18 7890

Tags: Linux kill-command process-management Signals SysAdmin

Publicado em 7-20 16:41