Як я можу вбити лише батьківський процес?


10

У мене такі процеси.

ParentProcess
- ChildProcess
- ChildProcess
- ChildProcess

Як я можу вбити лише батьківський процес? Я хочу, щоб діти не загинули. Якщо я спробую вбити батьківський процес, діти отримають SIGHUP і загинуть.


5
Чи є визначенням дочірнього процесу те, що воно пов'язане з його батьківським?
Бред Паттон

гм, напевно, так. Він прив’язаний до свого батька.
kcm1700

Відповіді:


8

Взагалі кажучи, коли процес стає сиротою (тобто помирає його батько), він приймається init.

Особлива ситуація, яку ви описуєте, ймовірно, стосується інтерактивного процесу, коли його керуючий термінал закривається (з Вікіпедії ):

Сигнал SIGHUP надсилається процесу, коли його керуючий термінал закритий. Спочатку він був розроблений для повідомлення про падіння послідовної лінії. У сучасних системах цей сигнал зазвичай означає, що керування псевдо або віртуальним терміналом було закрито.

Щоб цього не допустити, дочірні процеси повинні блокувати SIGHUP, тому в більшості випадків вам потрібна співпраця з батьківським процесом.

Якщо батьківський процес оболонки ( bash, cshтощо) , і ви хочете команди , які виконуються не закінчується , коли Баш закінчується, ви можете префікс будь-якої команди з nohup(від info coreutils "nohup invocation"):

'nohup' запускає дану КОМАНДУ з ігнорованими сигналами відключення, щоб команда могла продовжувати працювати у фоновому режимі після виходу.

У цьому прикладі:

$ tty
/dev/ttys000
$ nohup find /dir -name file -exec rm {} \;

findне буде вбито, коли оболонка закінчується і закриває керуючий термінал /dev/ttys000.

Якщо сценарій оболонки повинен блокувати SIGHUP, використовуйте вбудовану команду trap, як описано тут для bash.


1
Я вже відкрив процес без nohup, будь-яких пропозицій?
kcm1700

Наскільки я знаю, ти не можеш багато зробити. Після запуску процесів ви не можете змінити спосіб їх реагування на сигнали.
jaume

1
Як помістити вже запущений процес під nohup? stackoverflow.com/questions/625409 / ...
PeterVermont
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.