Почему мы используем setsid () при демонизации процесса?

18

Чтобы создать службу (демон), мы разветвляем родителя и заставляем его выйти, в то время как дочерний элемент становится лидером сеанса путем вызова setsid(). Более того, почему мы используем setsid ()? Наш бесхозный процесс решается init(хотя и не во всех случаях) процессом.

Почему мы используем stsid ()? Есть ли связь между setsid()обработкой SIGHUPсигнала и

Калу
источник

Ответы:

13

Мы используем setsid (), потому что если мы просто убьем родителя, то и ребенок будет убит, setsid ()

создает новый сеанс, если вызывающий процесс не является лидером группы процессов. Вызывающий процесс является лидером нового сеанса, лидером группы процессов новой группы процессов и не имеет управляющего терминала.

Родитель является первым лидером группы процессов, убивая его - или убивая сеанс / терминал - убивает группу, поэтому мы меняем лидера (и создаем новый сеанс, пока мы на нем).

ZN13
источник
1
Это правда, но есть ли у него какая-то реальность с сигналом SIGHUP, поскольку я знаю, что он посылается, когда теряется управляющий терминал
Калу
7
Родитель получает сигнал SIGHUP, когда управляющий терминал закрыт. Ребенок не получит SIGHUP, потому что он на новом занятии.
ZN13