Он просто проверяет, есть ли ровно один подкаталог, и если да, то перемещает из него все вверх, а затем удаляет его.[116636].
Это просто означает, что родитель демона (pid 677) начал новую сессию, вилку, а ребёнок (pid 678) унаследовал эту сессию и продолжил работу.
Это могло произойти, если какой-нибудь оберточный сценарий использовался для даемонизации чего-нибудь (и по какой-то причине не выполнил свою цель - возможно, для обработки перезагрузок), или просто потому, что процесс выбрал вилку снова перед тем, как войти в устойчивое состояние.
Я бы сказал, что процесс является фактически демоном, если PPID равен 1 и у него нет управляющего терминала. Ограничение session id/process group id часто также верно, но на самом деле не требуется для демонического поведения.
Ваши характеристики слишком строгие. Ключевое понятие здесь следующее: демон - это фоновый процесс, поэтому он не может быть процессом управления терминала и не может иметь управляющий терминал . Это простое «правило» позволяет демонам выжить при открытии / закрытии терминалов и входе / выходе пользователей.
У каждого терминала есть управляющий сеанс, то есть набор процессов, которые были запущены через этот терминал. Лидер сеанса, обычно оболочка, является контролирующим процессом терминала. Терминал называется управляющим терминалом оболочки.
Как вы сможете прочитать в этот ответ на один из моих вопросов , когда терминал закрыт, он отправляет сигнал SIGHUP
своему контролирующему процессу, оболочке . Обычно это приводит к тому, что все процессы, подключенные к этой оболочке, умирают, поскольку оболочка повторно передает полученный сигнал SIGHUP
всем своим заданиям.
Демонические процессы должны избегать этой цепочки, поскольку они должны выдерживать вход и выход пользователей из системы. По этой причине они должны отделиться от родительской оболочки. Обычный способ сделать это - удвоить вилку.
Поскольку оболочки не отслеживают своих внуков, они не будут отправлять SIGHUP
оставшейся части демона. Теперь, в этой настройке, внуки (демон) должны в основном иметь:
Обратите внимание, что в убийстве родителя не было особой необходимости: процесс умер бы вместе с его терминалом. Однако, чтобы избежать бесполезных процессов, будет немного чище немедленно завершить родительский процесс, прежде чем дочерний элемент начнет работать.
В этой ситуации процесс может называться демоном. Закрытие терминала его не убьет. Однако очень часто процессам-демонам предоставляется новый сеанс. На уровне API это делается с помощью системного вызова setsid
. После использования процесс должен иметь: