Qual dos sinais: SIGTERM ou SIGKILL pode gerar processos zumbi?
sobes.tech IA
Resposta da IA
O SIGTERM não pode gerar processos zombi diretamente. Ele envia uma notificação ao processo para terminar corretamente, dando-lhe a oportunidade de libertar recursos. Se o processo ignorar o SIGTERM, ele não terminará.
O SIGKILL não pode gerar processos zombi. Ele termina imediatamente o processo, sem lhe dar a oportunidade de terminar corretamente ou criar processos filhos.
Um processo zombi ocorre quando um processo filho termina, mas o seu processo pai não chama a função wait() ou waitpid() para recolher o seu estado de finalização. O processo pai é responsável por recolher o estado dos processos filhos terminados. Independentemente de como o processo filho terminou (por SIGTERM, SIGKILL ou por outro motivo), ele torna-se zombi até que o pai o "recolha" ou também termine.
Assim, os zombi são gerados por o processo pai, que não trata a finalização dos seus processos filhos, independentemente do sinal que levou à finalização do filho.
Exemplo em C que demonstra a criação de zombi:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
pid_t pid = fork(); // Criar processo filho
if (pid == 0) {
// Código do processo filho
printf("Processo filho (PID: %d) termina.\n", getpid());
exit(0); // Processo filho termina
} else if (pid > 0) {
// Código do processo pai
printf("Processo pai (PID: %d) criou filho (PID: %d).\n", getpid(), pid);
// O pai não chama wait() ou waitpid(), criando zombi ao terminar o filho
printf("Processo pai a dormir. O filho deve tornar-se zombi.\n");
sleep(60); // O pai dorme para que o filho termine e se torne zombi
} else {
// Erro no fork
perror("Erro no fork");
return 1;
}
return 0;
}
Neste exemplo, o processo filho termina, mas o processo pai não chama wait(), o que leva ao aparecimento de zombi. A terminação do filho neste caso não foi causada diretamente por SIGTERM ou SIGKILL, mas o princípio é o mesmo: o pai não recolheu o estado.
Se o filho fosse morto por SIGKILL, também se tornaria zombi se o pai não tivesse recolhido o seu estado. SIGKILL termina forçosamente o processo, mas o seu estado de finalização permanece na tabela de processos até que o pai o recolha.