В чем разница между сиротой и зомби-процессом?
Сирота - это процесс, который потерял родительский процесс и был присоединен к процессу init. Зомби-процесс - это процесс, который завершил свое выполнение, но еще остался в системе в виде записи в таблице процессов.
Сирота (orphan process) - это процесс, который был создан как дочерний к другому процессу, включая shell, который был закрыт. В этом случае процесс-родитель умирает, а дочерний процесс становится дочерним процессом init (процесс с PID 1). Используя это новое соединение, init может управлять процессом-сиротой и избежать утечек ресурсов.
Зомби-процесс (zombie process) - это процесс, который завершил свое выполнение, но еще присутствует в таблице процессов как запись, хотя основные ресурсы уже освобождены. Это происходит потому, что информация о завершенном процессе все еще нужна родительскому процессу для получения кода завершения. Если родительский процесс не читает эту информацию, зомби-процесс будет продолжать занимать место в таблице процессов, что со временем может привести к исчерпанию ресурсов.
Для предотвращения накопления зомби-процессов их нужно регулярно очищать. Это можно сделать путем реализации обработчика сигнала SIGCHLD в родительском процессе, который будет читать статус завершившихся дочерних процессов. Пример обработчика сигнала SIGCHLD на Python:
Такой обработчик будет реагировать на сигнал SIGCHLD и чистить завершившиеся дочерние процессы, предотвращая появление зомби-процессов
Отметьте свой прогресс