Дочерний процесс в вычислениях является процессом , созданный другим процесс ( родительский процесс ). Этот метод относится к многозадачным операционным системам и иногда называется подпроцессом или традиционно подзадачей .
Существуют две основные процедуры для создания дочернего процесса: в систему вилы вызова (предпочтительный в Unix-подобных системах и POSIX стандарт) и икру (предпочтительнее в современной (NT) ядра из Microsoft Windows , а также в какой - то исторической эксплуатации системы).
История
Дочерние процессы датируются концом 1960-х годов, с ранней формой в более поздних версиях формы мультипрограммирования с фиксированным числом задач версии II (MFT-II) операционной системы IBM OS / 360 , которая представила подзадачи (см. Задачу ) . Текущая форма в Unix основана на Multics (1969), а форма Windows NT основана на VAX / VMS из RSX-11 (1972).
Дети, созданные вилкой
Дочерний процесс наследует большинство своих атрибутов , таких как файловые дескрипторы , от своего родителя. В Unix дочерний процесс обычно создается как копия родительского с помощью системного вызова fork . Затем дочерний процесс может перекрыть себя другой программой (используя exec ) по мере необходимости.
Каждый процесс может создавать множество дочерних процессов, но иметь не более одного родительского процесса; если у процесса нет родителя, это обычно означает, что он был создан непосредственно ядром . В некоторых системах, включая системы на базе Linux , самый первый процесс (называемый init ) запускается ядром во время загрузки и никогда не завершается (см. Процесс запуска Linux ); другие процессы без родителей могут быть запущены для выполнения различных задач демона в пользовательском пространстве . Другой способ остаться без родителя для процесса - это смерть его родителя, оставивший процесс-сирот ; но в этом случае он вскоре будет принят init .
SIGCHLD сигнал посылается родителю дочернего процесса , когда он выходит , прерывается или возобновляется после прерывания. По умолчанию сигнал просто игнорируется. [1]
Дети, созданные спавном
Конец жизни
Когда дочерний процесс завершается, некоторая информация возвращается родительскому процессу.
Когда дочерний процесс завершается до того, как родительский процесс вызвал wait , ядро сохраняет некоторую информацию о процессе, такую как его статус выхода , чтобы его родитель мог вызвать wait позже. [2] Поскольку дочерний процесс все еще потребляет системные ресурсы, но не выполняет его, это называется зомби-процессом . Ожидания системного вызова обычно вызывается в обработчике SIGCHLD.
POSIX.1-2001 позволяет родительскому процессу выбрать ядро для автоматического получения дочерних процессов, которые завершаются путем явной установки для SIGCHLD значения SIG_IGN (хотя по умолчанию используется игнорирование, автоматическое получение происходит только в том случае, если для расположения установлено явно игнорировать [ 3] ), или установив флаг SA_NOCLDWAIT для сигнала SIGCHLD. Ядра Linux 2.6 придерживаются этого поведения, и FreeBSD поддерживает оба этих метода, начиная с версии 5.0. [4] Однако из-за исторических различий между поведением System V и BSD в отношении игнорирования SIGCHLD ожидание вызова остается наиболее переносимой парадигмой для очистки после разветвленных дочерних процессов. [5]
Смотрите также
Заметки
Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.
Рекомендации
- ^ Единая спецификация UNIX , выпуск 7 от Open Group - Справочник по базовым определениям,
- ^ : дождитесь изменения состояния процесса - Руководство программиста Linux - Системные вызовы
- ^ «Ядро Linux: сигналы» . Win.tue.nl . Проверено 30 апреля 2014 .
- ^ [1] Архивировано 29 сентября 2011 года в Wayback Machine.
- ^ : изучить и изменить сигнальное действие - Руководство программиста Linux - Системные вызовы
Внешние ссылки
- : деревья процессов печати - Руководство по командам пользователя Linux