Ответ
SIGTERM может привести к появлению зомби-процесса, если родительский процесс не обработает завершение дочернего процесса с помощью системных вызовов wait() или waitpid(). Зомби-процесс — это запись в таблице процессов, которая сохраняется до тех пор, пока родитель не прочитает статус завершения.
SIGKILL (исправлено с SIGSKILL) немедленно завершает процесс, не позволяя ему выполнить обработчики сигналов или корректно освободить ресурсы. Поскольку процесс не может отреагировать на SIGKILL, он не переходит в состояние зомби — ядро напрямую очищает его запись.
Пример на C:
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// Дочерний процесс завершается
exit(0);
} else {
// Родитель НЕ вызывает wait() — дочерний процесс станет зомби
sleep(30);
// После sleep можно увидеть зомби в выводе `ps aux | grep Z`
// Чтобы избежать зомби, здесь должен быть вызов: wait(NULL);
}
return 0;
}
Практика в DevOps: В сценариях оркестрации контейнеров (например, в Kubernetes) или при управлении сервисами через systemd важно правильно обрабатывать сигналы завершения, чтобы избегать накопления зомби-процессов, которые удерживают системные ресурсы (PID).