Завершаются ли процессы при закрытии терминала? - PullRequest
0 голосов
/ 20 марта 2020

В отношении parent > child process, выполненном с помощью fork (), я прочитал следующее:

Если родитель убит, дети становятся потомками процесса init (который имеет идентификатор процесса 1 и запускается ядром как первый пользовательский процесс).

Когда я запускаю программу с помощью терминала, она разветвляется и запускает новый двоичный файл. Почему при закрытии терминала дочерний процесс также завершается? Согласно приведенной выше информации, почему она не становится дочерней по отношению к процессу root?

Я также прочитал:

Когда вы закрываете bash с нормальным выходом из него запускает сигнал зависания SIGHUP для всех своих заданий.

Так что же происходит в конце дня? он становится потомком root процесса или умирает? Эти заявления заключают друг с другом.

1 Ответ

0 голосов
/ 20 марта 2020

Когда терминал закрыт, оболочка, которая работает в терминале, получает сигнал SIGHUP. Этот сигнал «транслируется» на все процессы (дочерние процессы), запущенные в этой оболочке. Поскольку SINGHUP по умолчанию является Сигнал завершения , программа прерывается, если не предпринимается никаких дополнительных действий.

Приложение может быть запущено с nohup (man nohup) команда должна быть устойчивой к SIGHUP или установить собственный обработчик сигнала.

...