%20%D0%BF%D1%80%D0%B8%20%D0%B4%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%B0%3F.png)
Для того, чтобы создатьслужба (демон)мы разветвляем родительский процесс и заставляем его выйти, делая потомка лидером сеанса, вызывая setsid()
. Более того, почему мы используем setsid()
? О нашем сиротском процессе заботится init
(хотя и не во всех случаях) процесс.
Почему мы используем setsid()
? Есть ли связь между setsid()
и обработкой SIGHUP
сигнала?.
решение1
Мы используем setsid()
, потому что если мы просто убьём родителя, то потомок тоже будет убит, setsid()
:
создает новый сеансесли вызывающий процесс не является лидером группы процессов. Вызывающий процесс является лидером нового сеанса, лидером группы процессов новой группы процессов и не имеет управляющего терминала.
Родительский процесс является первым лидером группы процессов, его завершение (или завершение сеанса/терминала) завершает группу, поэтому мы меняем лидера (и создаем новый сеанс, пока он находится в этом состоянии).