🧟 Как убрать зомби-процессы в LinuxЗомби-процессы (zombie processes) в Linux — это процессы, которые завершились, но их родительский процесс не вызвал wait() для очистки их записи в таблице процессов. Они не используют ресурсы процессора или памяти, но могут засорять таблицу процессов, создавая проблемы при большом их количестве.🔍 1. Поиск зомби-процессов Используйте одну из следующих команд:ps aux | awk '$8=="Z" {print $2, $11}'илиps -eo pid,ppid,stat,cmd | grep 'Z'или с использованием top:- Откройте top и нажмите Z (или посмотрите столбец STAT, где зомби-процессы помечены `Z`).🛠 2. Удаление зомби-процессов🔹 2.1. Завершение родительского процесса Если зомби-процесс еще существует, это значит, что его родитель не вызвал wait(). Определите родительский процесс (PPID):ps -eo pid,ppid,stat,cmd | grep 'Z'Завершите его командой:kill -SIGCHLD <PPID>Если процесс не реагирует, попробуйте:kill -9 <PPID>⚠️ Важно! Убедитесь, что родительский процесс не является критичным для системы.🔹 2.2. Перезапуск родительского процесса Если завершение родителя недопустимо, попробуйте его перезапустить:systemctl restart <service_name>илиservice <service_name> restart🔹 2.3. Использование init/systemd для "усыновления" процесса Если родительский процесс невозможно завершить или перезапустить, можно заставить init (PID 1) принять осиротевшие зомби. Это можно сделать, перезапустив родительский процесс, а затем проверив:ps -eo pid,ppid,stat,cmd | grep 'Z'🔹 2.4. Перезагрузка системы (как крайний случай) Если зомби-процессы не исчезают, а их количество растет, можно перезагрузить сервер:rebootили для безопасного завершения всех процессов:shutdown -r now🔒 3. Предотвращение появления зомби-процессов 1. Используйте обработку дочерних процессов в своих скриптах Если пишете демоны или фоновые процессы, убедитесь, что ваш код корректно вызывает waitpid().2. Применяйте обработчики сигналов В C/C++ можно использовать обработчик SIGCHLD:signal(SIGCHLD, SIG_IGN);3. Настройте systemd для автоматического управления процессами В systemd можно создать службу с KillMode=process в /etc/systemd/system/myservice.service:[Service] KillMode=process4. Контролируйте процессы с помощью ulimit Установите лимиты на максимальное число процессов:ulimit -u 100000👉 @i_odmin