Осиротілий процес () — це комп'ютерний процес, батьківський процес якого завершився або був припинений, хоча сам він продовжує виконуватися.

Unix-подібні системи У Unix-подібній операційній системі будь-який осиротілий процес буде негайно «усиновлений» системним процесом, визначеним реалізацією: ядро встановлює цьому процесу як батьківський зазначений системний процес. Ця операція називається переприв'язуванням батьківського процесу () і відбувається автоматично. Навіть хоча технічно батьківським процесом є системний процес, його все одно називають осиротілим процесом, оскільки процес, який спочатку його створив, більше не існує. В інших системах осиротілі процеси негайно припиняються ядром. Більшість Unix-систем історично використовували init як системний процес, до якого переприв'язувалися осиротілі процеси, але в сучасних DragonFly BSD, FreeBSD та Linux осиротілий процес може бути переприв'язаний до процесу-«підбирача» () замість init.

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

Іноді бажано навмисно зробити процес осиротілим, зазвичай щоб дозволити тривалій задачі завершитися без подальшого втручання користувача або щоб запустити службу чи агент, який працюватиме невизначено довго; такі процеси (без пов'язаного сеансу) називаються демонами, особливо якщо вони працюють невизначено довго. Низькорівневий підхід полягає в тому, щоб двічі виконати fork, запустивши потрібний процес у нащадку другого рівня та негайно завершивши дочірній процес. Процес-нащадок другого рівня тепер є осиротілим і приймається не його дідом, а init. Альтернативи вищого рівня обходять обробку оболонкою сигналу від'єднання: або наказуючи дочірньому процесу ігнорувати SIGHUP (за допомогою nohup), або видаляючи завдання з таблиці завдань, або наказуючи оболонці не надсилати SIGHUP під час завершення сеансу (в обох випадках за допомогою disown). У будь-якому разі ідентифікатор сеансу (ідентифікатор процесу лідера сеансу, тобто оболонки) не змінюється, а ідентифікатор процесу завершеного сеансу залишається використовуваним, доки всі осиротілі процеси не завершаться або не змінять ідентифікатор сеансу (почавши новий сеанс за допомогою setsid(2)).

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

Також кажуть, що серверний процес є осиротілим, коли клієнт, який ініціював запит, несподівано аварійно завершується після виконання запиту, залишаючи серверний процес працювати.

Такі осиротілі процеси витрачають ресурси сервера і потенційно можуть призвести до виснаження доступних серверних ресурсів. Однак існує кілька способів розв'язання проблеми осиротілих процесів:

Завершення — найпоширеніший метод; у цьому випадку осиротілий процес примусово завершується. Реінкарнація — метод яким машини періодично намагаються знайти батьківські процеси; після цього осиротілі процеси завершуються. Завершення за часом () — метод, за якого кожному процесу надається певний час для завершення перед його примусовим завершенням. За потреби процес може «попросити» додатковий час для завершення до спливу відведеного часу.

Див. також Процес-зомбі Процес-демон

Примітки