Дочерний процесс
Дочерний процесс в вычислениях — это процесс , созданный другим процессом ( родительским процессом ). Этот метод относится к многозадачным операционным системам и иногда называется подпроцессом или традиционно подзадачой .
Существует две основные процедуры создания дочернего процесса: системный вызов fork (предпочтительный в Unix-подобных системах и стандарте POSIX ) и spawn (предпочтительный в современном (NT) ядре Microsoft Windows , а также в некоторых исторических операционных системах. системы).
История
[ редактировать ]Дочерние процессы возникли в конце 1960-х годов, а ранняя форма появилась в более поздних версиях формы « Мультипрограммирование с фиксированным числом задач версии II» (MFT-II) операционной системы IBM OS/360 , в которой были представлены подзадачи (см. Задачу ). . Текущая форма в Unix основана на Multics (1969), а форма Windows NT — на OpenVMS (1978) из RSX-11 (1972).
Дети, созданные вилкой
[ редактировать ]Дочерний процесс наследует большую часть своих атрибутов , таких как файловые дескрипторы , от своего родительского процесса. В Unix дочерний процесс обычно создается как копия родительского процесса с помощью системного вызова fork . Дочерний процесс может затем наложиться на другую программу (используя exec ) по мере необходимости.
Каждый процесс может создавать множество дочерних процессов, но иметь не более одного родительского процесса; если у процесса нет родителя, это обычно указывает на то, что он был создан непосредственно ядром . В некоторых системах, включая системы на базе Linux , самый первый процесс (называемый init ) запускается ядром во время загрузки и никогда не завершается (см. Процесс запуска Linux ); другие процессы без родителей могут быть запущены для выполнения различных задач демона в пользовательском пространстве . Другой способ остаться у процесса без родителя — это смерть его родителя, оставив процесс-сироту ; но в этом случае он вскоре будет принят init .
SIGCHLD Сигнал отправляется родительскому элементу дочернего процесса, когда он завершается , прерывается или возобновляется после прерывания. По умолчанию сигнал просто игнорируется. [1]
Дети, созданные спавном
[ редактировать ]![]() | Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( февраль 2014 г. ) |
Конец жизни
[ редактировать ]Когда дочерний процесс завершается, некоторая информация возвращается родительскому процессу.
Когда дочерний процесс завершается до того, как родительский процесс вызвал 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]
См. также
[ редактировать ]- Выход
- pstree , чтобы UNIX мог найти дочерний процесс ( pstree PID , где PID — это идентификатор процесса).
Ссылки
[ редактировать ]- ^ Единая спецификация UNIX , версия 4 от Open Group. – Справочник базовых определений,
- ^ Linux программиста Руководство – Системные вызовы : дождаться изменения состояния процесса –
- ^ «Ядро Linux: Сигналы» . Win.tue.nl. Проверено 30 апреля 2014 г.
- ^ [1] Архивировано 29 сентября 2011 г. в Wayback Machine.
- ^ Linux программиста Руководство – Системные вызовы : проверить и изменить действие сигнала –
Внешние ссылки
[ редактировать ]- командам Linux пользователя по Руководство : печать деревьев процессов –