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 prefixoSIG) 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 comandops. Frequentemente,psé combinado comgreppara filtrar processos específicos, comops 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 porCtrl+\. 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
SIGSTOPouSIGTSTP). - 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
SIGPOLLem 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