Для того, чтобы создатьслужба (демон)мы разветвляем родительский процесс и заставляем его выйти, делая потомка лидером сеанса, вызывая setsid()
. Более того, почему мы используем setsid()
? О нашем сиротском процессе заботится init
(хотя и не во всех случаях) процесс.
Почему мы используем setsid()
? Есть ли связь между setsid()
и обработкой SIGHUP
сигнала?.
решение1
Мы используем setsid()
, потому что если мы просто убьём родителя, то потомок тоже будет убит, setsid()
:
создает новый сеансесли вызывающий процесс не является лидером группы процессов. Вызывающий процесс является лидером нового сеанса, лидером группы процессов новой группы процессов и не имеет управляющего терминала.
Родительский процесс является первым лидером группы процессов, его завершение (или завершение сеанса/терминала) завершает группу, поэтому мы меняем лидера (и создаем новый сеанс, пока он находится в этом состоянии).