Как я могу убить только родительский процесс?

10

У меня есть следующие процессы.

ParentProcess
- ChildProcess
- ChildProcess
- ChildProcess

Как я могу убить только родительский процесс? Я хочу, чтобы процессы детей не были убиты. Если я попытаюсь убить родительский процесс, дети получат SIGHUP и будут убиты.

kcm1700
источник
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