Вы не можете предотвратить превращение какого-либо процесса в зомби, но вы можете ограничить время, в течение которого остается единицей.Процесс - это зомби с момента, когда он заканчивается, до момента, когда его родитель собирает его с помощью вызова wait()
или waitpid()
или другой функции, выполняющей эту функцию.Это время может быть действительно очень коротким, например, если родительский процесс уже ожидает, когда дочерний процесс завершается, но завершение и последующий сбор не являются синхронными.
Различие между фоновым и передним процессами главным образом заключается в управлениитерминал;это не имеет ничего общего с родительской оболочкой, управляющей дочерними процессами.Вы собираете дочерние процессы, принадлежащие фоновым заданиям, с помощью wait()
, и т. Д. . Точно так же, как вы собираете дочерние процессы, принадлежащие приоритетным заданиям.Вы можете собирать уже завершенных дочерних элементов, не ожидая неопределенных, используя waitpid()
с флагом W_NOHANG
, как уже описано @Someprogrammerdude.Осталось вставить такие ожидания в подходящее время, и для интерактивных оболочек, как правило, планируют это вокруг чтения команд от пользователя.