Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Процесс сироты представляет собой компьютерный процесс , чей процесс родителя закончил или прекращено , хотя он по- прежнему работает на себя.

Unix-подобный [ править ]

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

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

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

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

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

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

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

См. Также [ править ]

Ссылки [ править ]

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

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