Jump to content

Дочерний процесс

Дочерний процесс в вычислениях — это процесс , созданный другим процессом ( родительским процессом ). Этот метод относится к многозадачным операционным системам и иногда называется подпроцессом или традиционно подзадачой .

Существует две основные процедуры создания дочернего процесса: системный вызов 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]

Дети, созданные спавном

[ редактировать ]

Конец жизни

[ редактировать ]

Когда дочерний процесс завершается, некоторая информация возвращается родительскому процессу.

Когда дочерний процесс завершается до того, как родительский процесс вызвал 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 — это идентификатор процесса).
  1. ^ signal.h – Справочник базовых определений, Единая спецификация UNIX , версия 4 от Open Group.
  2. ^ wait(2): дождаться изменения состояния процесса – Linux программиста Руководство – Системные вызовы
  3. ^ «Ядро Linux: Сигналы» . Win.tue.nl. ​Проверено 30 апреля 2014 г.
  4. ^ [1] Архивировано 29 сентября 2011 г. в Wayback Machine.
  5. ^ sigaction(2): проверить и изменить действие сигнала – Linux программиста Руководство – Системные вызовы
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fc32667583215b6ea0d566a0c5341714__1715211120
URL1:https://arc.ask3.ru/arc/aa/fc/14/fc32667583215b6ea0d566a0c5341714.html
Заголовок, (Title) документа по адресу, URL1:
Child process - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)