Создает ли этот диспетчер зомби-процесс?

Создает ли этот диспетчер зомби-процесс?

У меня есть такой скрипт диспетчера.

while read line
do
    java TestProg $line &
done < $tasklist

НаПроцесс зомби Страница Википедии, он говорит

если родительский процесс не вызовет wait, зомби останется в таблице процессов, что приведет к утечке ресурсов

в скрипте выше я не использовал функцию wait(я написал много скриптов оболочки диспетчера таким образом). Мне интересно, нужно ли мне использовать waitэто, чтобы предотвратить зомби-процессы:

while read line
do
    java TestProg $line &
done < $tasklist
wait

решение1

У меня есть 2 ответа:

Если родитель умирает/заканчивается, то процессы наследуются init. init сделает это за вас. Так что для краткосрочных процессов вам не о чем беспокоиться. Совет должен быть call waitили exit.

Я думаю, что вызовы bash ждут вас и помещают куда-нибудь код выхода.

waitполучает только коды выхода, затем пожинает процесс. Зомби использует мало ресурсов, все освобождается, кроме слота в таблице процессов: идентификатор процесса и т. д.

Зомби мертв: все его ресурсы освобождены, кроме его слота в таблице процессов. Причина, по которой его слот в таблице процессов не освобожден, заключается в том, что родитель может (помимо прочего) получить свой код возврата и сообщить дочернему процессу, который только что умер, не задев другой процесс, который повторно использует идентификатор процесса (pid).

Связанный контент