Должен ли демон с хорошим поведением демонизировать себя? [closed]

Вы можете сослаться на эту ссылку эта ссылка. rsync имеет функцию удаления папки, которая не закрывается на live ENV .

rsync -av --delete

3
13.04.2017, 15:36
2 ответа

Демон с хорошим поведением должен демонизировать себя, потому что это то, что ожидается от демона. Демон должен работать нормально, даже если он не запущен из среды запуска демона.

Демон с хорошим поведением должен иметь возможность не демонизировать себя, чтобы его можно было запускать из супервизора. (Последние ядра Linux упрощают наблюдение за демонами, выполняющими двойную вилку, но не во всех системах используется последнее ядро ​​Linux, и не каждая программа супервизора предполагает наличие последнего ядра Linux.)

2
27.01.2020, 21:18

Я всегда думал, что 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 будет немного сложнее.

3
27.01.2020, 21:18

Теги

Похожие вопросы