В некоторых системах, когда процесс порождает другой процесс, родительский и дочерний процессы продолжают оставаться определенным образом связанными друг с другом. Дочерний процесс может и сам создать какие-нибудь процессы, формируя иерархию процессов. Следует заметить, что, в отличие от растений и животных, использующих половую репродукцию, у процесса есть только один родитель (но нуль, один, два или более детей). Следо¬вательно, процесс больше похож на гидру, чем, скажем, на корову.
В UNIX процесс, все его дочерние процессы и более отда¬ленные потомки образуют группу процессов. Когда пользователь отправляет сигнал с клавиатуры, тот достигает всех участников этой группы процессов, связанных на тот момент времени с клавиа¬турой (обычно это все действующие процессы, которые были со¬зданы в текущем окне). Каждый процесс по отдельности может за¬хватить сигнал, игнорировать его или совершить действие по умол¬чанию, которое должно быть уничтожено сигналом.
В качестве другого примера, поясняющего ту ключевую роль, которую играет иерархия процессов, давайте рассмотрим, как UNIX инициализирует саму себя при запуске сразу же после начальной загрузки компьютера. В загрузочном образе присут¬ствует специальный процесс, называемый init. В начале своей ра¬боты он считывает файл, сообщающий о количестве терминалов. Затем он разветвляется, порождая по одному процессу на каждый терминал. Эти процессы ждут, пока кто-нибудь не зарегистриру¬ется в системе. Если регистрация проходит успешно, процесс реги¬страции порождает оболочку для приема команд. Эти команды мо¬гут породить другие процессы и т. д. Таким образом, все процессы во всей системе принадлежат единому дереву, в корне которого находится процесс init.
В отличие от этого в Windows не существует понятия иерархии процессов, и все процессы являются равнозначными. Единственным намеком на иерархию процессов можно считать присвоение родительскому процессу, создающему новый процесс, специального маркера (называемого дескриптором), который мо¬жет им использоваться для управления дочерним процессом. Но он может свободно передавать этот маркер какому-нибудь другому процессу, нарушая тем самым иерархию. А в UNIX процессы не могут лишаться наследственной связи со своими дочерними про¬цессами.

Оставить комментарий