Вообще говоря, когда процесс становится бесхозным (то есть, его родитель умирает), он принимается 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
.