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

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

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

Существует две основные процедуры для создания дочернего процесса: системный вызов fork (предпочтительно в Unix-подобных системах и стандарте POSIX ) и spawn (предпочтительно в современных (NT) ядро ​​ из Microsoft Windows, а также в некоторых исторических операционных системах).

Содержание
  • 1 История
  • 2 Потомки, созданные fork
  • 3 Потомки, созданные spawn
  • 4 Конец жизни
  • 5 См. Также
  • 6 Примечания
  • 7 Ссылки
  • 8 Внешние ссылки
История

Дочерние процессы датируются концом 1960-х годов, с ранней формой в более поздних версиях Мультипрограммирование с фиксированным числом задач Версия II (MFT-II) форма операционной системы IBM OS / 360, которая представила подзадачи (см. задача ). Текущая форма в Unix основана на Multics (1969), тогда как форма Windows NT основана на VAX / VMS из RSX-11 (1972).

Дочерние элементы, созданные fork

Дочерний процесс наследует большинство своих атрибутов, таких как файловые дескрипторы, от своего родителя. В Unix дочерний процесс обычно создается как копия родительского с помощью системного вызова fork. Затем дочерний процесс может перекрыть себя другой программой (используя exec ) по мере необходимости.

Каждый процесс может создавать множество дочерних процессов, но будет иметь не более одного родительского процесса; если у процесса нет родителя, это обычно означает, что он был создан непосредственно ядром ядром. В некоторых системах, включая системы на базе Linux, самый первый процесс (называемый init ) запускается ядром во время загрузки и никогда не завершается (см. процесс запуска Linux ); другие процессы без родителей могут быть запущены для выполнения различных задач демона в пользовательском пространстве. Другой способ остаться без родителя для процесса - это если его родитель умирает, в результате чего остается сиротский процесс ; но в этом случае он вскоре будет принят init.

Сигнал SIGCHLD отправляется родительскому процессу дочернего процесса, когда он выходит из, прерывается или возобновляется после прерывания. По умолчанию сигнал просто игнорируется.

Дочерние элементы, созданные spawn
Конец жизни

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

Когда дочерний процесс завершается до того, как родительский процесс вызвал wait, ядро ​​сохраняет некоторую информацию о процессе, такую ​​как его статус выхода, чтобы его родитель мог звоните, подождите позже. Поскольку дочерний процесс все еще потребляет системные ресурсы, но не выполняет его, он известен как зомби-процесс. Системный вызов ожидания обычно вызывается в обработчике SIGCHLD.

POSIX.1-2001 позволяет родительскому процессу выбрать для ядра автоматическое получение дочерних процессов, которые завершаются, путем явной установки для SIGCHLD значения SIG_IGN (хотя по умолчанию используется игнорирование, автоматическое получение происходит только в том случае, если расположение установлен на игнорирование явно), или установив флаг SA_NOCLDWAIT для сигнала SIGCHLD. Ядра Linux 2.6 придерживаются этого поведения, и FreeBSD поддерживает оба этих метода начиная с версии 5.0. Однако из-за исторических различий между поведением System V и BSD в отношении игнорирования SIGCHLD, вызов ожидания остается наиболее переносимой парадигмой для очистки после разветвленных дочерних процессов.

См. Также
  • exit
  • pstree, чтобы UNIX могла найти дочерний процесс (PID pstree, где PID - это идентификатор процесса).
Примечания

Эта статья основан на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или более поздней.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-14 11:33:28
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте