Вызов функции release_task ()? - PullRequest
0 голосов
/ 08 июня 2011

В Linux kernel process descriptor процесса удаляется из системы путем вызова функции release_task() после завершения процесса.

Полагаю, системный вызов wait(), отправленный родительским процессом дочернего процесса, вызывает функцию release_task(), когда дочерний процесс завершается.

Предположим, что родительский процесс не выдает системный вызов wait() явно, как вызывается функция release_task() и освобождается дескриптор процесса дочернего процесса?

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Если родительский процесс не wait(2) для дочернего процесса, дочерний процесс становится zombie. Пока живет родитель, ребенок не может быть пожинен . Когда родитель умирает, все его нежданные дети усыновляются init. Одна из задач init - периодически ждать детей (освобождая при этом соответствующие ресурсы)

0 голосов
/ 02 октября 2017

Функция release_task () отсоединяет последние структуры данных от дескриптора процесса зомби; он применяется к процессу зомби двумя возможными способами: функцией do_exit () , если родитель не заинтересован в получении сигналов от ребенка, или функцией wait4 () или waitpid () системные вызовы после отправки сигнала родителю. В последнем случае функция также будет восстанавливать память, используемую дескриптором процесса, тогда как в первом случае восстановление памяти будет выполняться планировщиком, потому что do_exit () вызывает schedule () в своем последнем шаге.

Для получения дополнительной информации вы можете обратиться к книге - Понимание ядра Linux: порты ввода-вывода и управление процессами .

...