Я всегда думал, что setsid ()
и руководители сеансов связаны с управлением процессами и тем, как работает доставка сигналов с терминалов. Они на один уровень выше, чем группы процессов.
Ответ на Stackoverflow относится к POSIX.1-2008 , в котором говорится:
3.339 Сессия
Набор групп процессов, созданных для управления заданиями. Каждая группа процессов является членом сеанса. Процесс считается членом сеанса, членом которого является его группа процессов. Вновь созданный процесс присоединяется к сеансу его создателя. Процесс может изменять свое членство в сеансе; см. setsid (). В одном сеансе может быть несколько групп процессов.
И Глава 11 продолжает рассказывать, как доставляются сигналы, на основе групп процессов и управляющего терминала сеанса.
На практике все логически отдельные «сеансы» в системе Linux, на которую я смотрел, запускаются под отдельным идентификатором сеанса: s, поэтому логин
или какой-либо другой ( sshd
, ] screen
) запускает setsid
, как вы предложили.
Что касается того, что должен делать демон, я полагаю, это зависит от того, какую систему инициализации он использует. В Linux с традиционными сценариями инициализации System V демон должен работать в фоновом режиме самостоятельно (или с помощью помощника). Хотя с sysvinit сценарии инициализации могут запускаться непосредственно из оболочки администратора, и это может быть не во всех случаях чистой средой. (Можно унаследовать, например, ограничения ресурсов из сеанса.)
В Upstart и Systemd может быть предпочтительнее, если демон не выполняет форк сам, поскольку система инициализации может это сделать. (И Upstart, в частности, делает некоторые забавные вещи , чтобы следовать за демонами-ветвями.)
(Я не знаю о других Unix, но, как прокомментировал @Stephen Harris , это может быть хорошая идея для программы-демона, поддерживающей как разветвление, так и не-разветвление.)
Тогда есть, например, ssh-agent
, который часто запускается самим пользователем без поддержки со стороны системы инициализации. Очень полезно, что он может развиваться в фоновом режиме (с setsid
) и оставаться в живых, поэтому его можно использовать из нескольких оболочек. ( экран
окна, xterm
s ...) Он также имеет полезный вывод при запуске, поэтому запуск его с nohup
будет немного сложнее.