У меня есть следующие процессы.
ParentProcess - ChildProcess - ChildProcess - ChildProcess
Как я могу убить только родительский процесс? Я хочу, чтобы процессы детей не были убиты. Если я попытаюсь убить родительский процесс, дети получат SIGHUP и будут убиты.
Ответы:
Вообще говоря, когда процесс становится бесхозным (то есть, его родитель умирает), он принимается init.
Описанная вами особая ситуация, вероятно, применима к интерактивному процессу, когда его управляющий терминал закрывается (из Википедии ):
Чтобы предотвратить это, дочерние процессы должны блокировать SIGHUP, поэтому в большинстве случаев вам необходимо сотрудничество с родительским процессом.
Если родительский процесс оболочки (
bash
,csh
и тому подобное) , и вы хотите команды , которые выполняются не заканчивается , когда Баш заканчивается, вы можете префикс любой команды сnohup
(отinfo coreutils "nohup invocation"
):В этом примере:
find
не будет убит, когда оболочка завершит работу и закроет управляющий терминал/dev/ttys000
.Если сценарий оболочки должен блокировать SIGHUP, используйте встроенную команду
trap
, как описано здесь дляbash
.источник