Есть ли веская причина написать свою собственную функцию daemonize вместо использования daemon (3)? - PullRequest
3 голосов
/ 15 сентября 2010

В сети много примеров реализации демонов.Большинство из того, что я видел, не использует функцию daemon (3) для запуска программы в фоновом режиме.Это просто вопрос вкуса, невежества или есть веская причина написать свою собственную демонизирующую функцию?Есть ли определенный недостаток в использовании daemon (3)?Это небезопасно?

Ответы [ 4 ]

5 голосов
/ 15 сентября 2010

Функция daemon () исторически не была доступна во всех разновидностях Unix, поэтому многие «переносимые» коды ее не используют.На самом деле нет никакой причины бросать свой собственный рецепт, если на всех целевых платформах, которые вам нужны, есть daemon ().

3 голосов
/ 16 сентября 2010

В POSIX нет функции daemon. Это расширение поставщика. Таким образом, любой, кто пишет переносимый код, просто пишет свой.

3 голосов
/ 16 сентября 2010

Функция BSD daemon () очень ограничена и допускает неправильное использование. Только очень немногие демоны могут использовать эту функцию правильно.

На man-страницах systemd есть список того, что правильно написанный демон SysV должен делать при демонизации:

http://0pointer.de/public/systemd-man/daemon.html

2 голосов
/ 15 сентября 2010

Если вам не нравятся какие-либо стандартные функциональные действия daemon(), вы можете написать свои собственные.Вы можете контролировать, переключается ли он на корневой каталог;вы можете контролировать повторное подключение стандартных каналов ввода / вывода к / dev / null.Но если вы хотите, чтобы stderr был открыт для файла журнала, при повторном подключении stdin и stdout к / dev / null, вы должны решить, лучше ли использовать daemon() с соответствующими параметрами, за которыми следует другой код, чем свернуть свой собственный.

В 10000 * не так много ракетостроения;он вызывает fork() и setsid() (согласно версии Linux; в версии MacOS упоминается приостановка SIGHUP во время работы daemon()).Проверьте стандартные ресурсы для получения дополнительной информации о демонизации - например:

...