Подтвердить что ты не робот

Почему вики-демоны?

Я знаю, что некоторые (все?) демоны развиваются, когда они запускаются. Мне кажется, что это запуск дочерних процессов как менее привилегированных пользователей, особенно если демон является чем-то вроде HTTP-сервера.

Почему это необходимо? Не удалось запустить процесс и отказаться от его привилегий без наложения дочернего процесса? Является ли это "обязательным" для разветвления или существует какая-то другая особая причина (кроме запуска нескольких дочерних рабочих процессов)?

Я новичок в этом и буду признателен за всю помощь, которую я могу получить.

4b9b3361

Ответ 1

Я думаю, что вилка демонов по нескольким причинам:

  • Одной из причин является отделить процесс от любой оболочки, которая запускает ее. Некоторые оболочки (например, Bash) убивают детей при выходе, если не приняты специальные меры предосторожности для оболочки. Викинг - это общий способ избежать этого.

  • Другая причина - сообщить, что демон успешно запущен.

    Предположим, что это не fork. Как вы узнали, что демон успешно запущен? Вы не можете просто прочитать и разобрать вывод демона, потому что программы управления демонами должны делать это в общем виде. Таким образом, единственный способ - получить код возврата программы.

    В самом деле, если демона не удалось запустить (например, он не смог найти файл конфигурации), вы сразу узнаете об этом. Но эй, если демон был успешно запущен, он никогда не вернется! Поэтому ваш диспетчер демонов не может знать, пытается ли демон запускать или был запущен и работает. Вилка решила проблему, и программа forking вернула бы успех, если бы вилка работала хорошо.

  • Что касается привилегий, удаление их после execve гораздо менее безопасно, чем при использовании execve. Вот еще одна причина, по которой вилка удобна.

Ответ 2

Демоны должны развиваться два раза, потому что они должны быть независимыми от других процессов, то есть нет способа убить демона, убивающего другой процесс, и должен работать в фоновом режиме, который не привязан к терминалу.

При запуске вилки демонов и родительский штамп. Это делает разветвленный процесс дочерним элементом init, поэтому в основном он не зависит от других процессов.

На втором вилке ребенок больше не является лидером процесса и отсоединяется от терминала.

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

Ответ 3

У меня создалось впечатление, что это было сделано для того, чтобы демона полностью не привязана к каким-либо другим процессам (например, оболочке или тому подобному). При открытии и выходе из родительского процесса процесс Orphaned будет "принят" процессом инициализации системы.

Ответ 4

Чтобы создать резервную копию того, что сказал daramarak, из Статья в Википедии:

В среде Unix родительский процесс демона часто (но не всегда) процесс init (PID = 1). Процессы обычно становятся демонами разворачивание дочернего процесса, а затем с их родительским процессом немедленно выйти, тем самым вызывая принять детский процесс. Это несколько упрощенный вид процесса, поскольку другие операции обычно выполняемых, таких как диссоциация процесса демона из любой контрольный tty. удобство такие подпрограммы, как демон (3), существуют в некоторые UNIX-системы для этой цели.

В основном процесс должен быть отключен от других процессов и от терминалов и т.д.