Сиротский процесс - Orphan process

An сиротский процесс это компьютерный процесс чей родительский процесс закончил или прекращено, хотя он остается запущенным.

Unix-подобный

В Unix-подобный Операционная система любой осиротевший процесс будет немедленно принят специальным в этом системный процесс: ядро ​​устанавливает для родителя значение init. Эта операция называется повторное воспитание и происходит автоматически. Даже несмотря на то, что технически процесс имеет процесс «init» в качестве своего родителя, он по-прежнему называется сиротским процессом, поскольку процесс, который его изначально создал, больше не существует. В других системах осиротевшие процессы немедленно завершаются ядром. В современных системах Linux сиротский процесс может быть преобразован в процесс «подпроцессора» вместо в этом.[1][2]

Процесс может быть потерян непреднамеренно, например, когда родительский процесс завершается или выходит из строя. В группа процессов Механизм в большинстве Unix-подобных операционных систем может использоваться для защиты от случайного «осиротения», когда по согласованию с пользователем ракушка будет пытаться завершить все дочерние процессы сигналом "зависания" (SIGHUP ), вместо того, чтобы позволить им продолжать бегать сиротами. Точнее, в составе контроль работы, когда оболочка завершает работу, поскольку она является «лидером сеанса» (его идентификатор сеанса равен идентификатору процесса), соответствующий сеанс входа в систему завершается, и оболочка отправляет SIGHUP всем своим заданиям (внутреннее представление групп процессов).

Иногда желательно намеренно осиротить процесс, обычно для того, чтобы позволить длительному заданию завершиться без дополнительного внимания пользователя или запустить бессрочно работающую службу или агент; такие процессы (без ассоциированного сеанса) известны как демоны, особенно если они работают бесконечно. Низкоуровневый подход заключается в вилка дважды, запустив желаемый процесс в внуке и немедленно завершив дочерний процесс. Теперь процесс внука осиротел и принимается не его дедушкой или бабушкой, а скорее init. Альтернативы более высокого уровня обходят обработку зависания оболочки, либо сообщая дочернему процессу игнорировать SIGHUP (используя нету ), или удаление задания из таблицы заданий, или указание оболочке не отправлять SIGHUP в конце сеанса (с помощью отречься в любом случае). В любом случае идентификатор сеанса (идентификатор процесса лидера сеанса, оболочки) не изменяется, а идентификатор процесса завершившегося сеанса все еще используется до тех пор, пока все осиротевшие процессы не завершатся или не изменят идентификатор сеанса (путем запуска новая сессия через сетсид (2)).

Чтобы упростить системное администрирование, часто желательно использовать оболочка службы чтобы процессы, не предназначенные для использования в качестве служб, правильно реагировали на системные сигналы. Альтернативой для продолжения работы процессов без потери их статуса является использование оконечный мультиплексор и запускать процессы в отключенном сеансе (или сеансе, который отключается), чтобы сеанс не завершался и процесс не оставался сиротским.

Серверный процесс также называется осиротевшим, когда клиент, инициировавший запрос, неожиданно завершает работу после выполнения запроса, оставляя серверный процесс запущенным.

Эти потерянные процессы тратят ресурсы сервера и потенциально могут привести к нехватке ресурсов на сервере. Однако есть несколько решений проблемы сиротского процесса:

  1. Истребление - наиболее часто используемый метод; в этом случае сироту убивают.
  2. Реинкарнация - это метод, при котором машины периодически пытаются найти родителей любых удаленных вычислений; в этот момент осиротевшие процессы уничтожаются.
  3. Истечение срока - это метод, при котором каждому процессу дается определенное время для завершения, прежде чем он будет убит. В случае необходимости процесс может «попросить» больше времени для завершения до истечения отведенного времени.

Смотрите также

Рекомендации

  1. ^ «Что такое« субжатний »процесс?».
  2. ^ «Новый родительский процесс, когда родительский процесс умирает». Начиная с Linux 3.4 процессы могут выполнять системный вызов prctl () с параметром PR_SET_CHILD_SUBREAPER, и в результате они, а не процесс №1, станут родительскими для любого из своих осиротевших дочерних процессов.

Определение: сиротский процесс - это запущенный процесс, родительский процесс которого завершен или завершен.