почему группа фоновых процессов умирает, когда терминал закрыт - PullRequest
1 голос
/ 03 апреля 2011

Согласно этому FAQ (и многим другим книгам):

ftp: //rtfm.mit.edu/pub/faqs/unix-faq/programmer/faq

1.15 Почему мой процесс не получает SIGHUP, когда его родитель умирает?

SIGHUP не будет отправляться фоновым процессам, если ни один из них не " остановлен".

но мы все знаем, что если SIGHUP не будет захвачен в фоновых процессах, они умрут, когда вы закроете терминал (или соединение, например, ssh).

, т.е.CTRL + Z - bg недостаточно для выживания процесса при закрытии терминала.

Но почему?Любая мудрость ценится!

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Для этого есть простое решение. Используйте nohup перед запуском команды.

0 голосов
/ 03 апреля 2011

После небольшого приближения.Я предполагаю, что сигнал HUP, который приводит к выходу фоновых процессов, поступает от оболочки.

Вот шаги:

  1. Терминал закрыт, bash получает SIGHUP от ядра (драйвера))

  2. По умолчанию Bash завершает работу при получении SIGHUP.Перед выходом он отправляет сигнал SIGHUP на все задания , работает или остановлен

  3. Все задания, включая фоновые процессы, завершаются, если они не фиксируют SIGHUP

...