Может Обработать идентификатор, и идентификатор сессии демона отличаются?

[116633] Этот скрипт не является робастным, но работает в простых случаях:

  • Он просто проверяет, есть ли ровно один подкаталог, и если да, то перемещает из него все вверх, а затем удаляет его.[116636].

  • 2
    23.05.2017, 15:39
    2 ответа

    Это просто означает, что родитель демона (pid 677) начал новую сессию, вилку, а ребёнок (pid 678) унаследовал эту сессию и продолжил работу.

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

    Я бы сказал, что процесс является фактически демоном, если PPID равен 1 и у него нет управляющего терминала. Ограничение session id/process group id часто также верно, но на самом деле не требуется для демонического поведения.

    0
    27.01.2020, 22:13

    Ваши характеристики слишком строгие. Ключевое понятие здесь следующее: демон - это фоновый процесс, поэтому он не может быть процессом управления терминала и не может иметь управляющий терминал . Это простое «правило» позволяет демонам выжить при открытии / закрытии терминалов и входе / выходе пользователей.

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

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

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

    1. Демон порождает дочерний процесс.
    2. Демон завершает свой «основной» / родительский процесс.
    3. Вся работа делается в ребенке.

    Поскольку оболочки не отслеживают своих внуков, они не будут отправлять SIGHUP оставшейся части демона. Теперь, в этой настройке, внуки (демон) должны в основном иметь:

    • Свой собственный PID, как и любой другой процесс.
    • PGID прерванного родительского объекта.
    • PPID его ближайшего субрепера, обычно PID 1.
    • SID его теперь завершенного родителя, который обычно также является SID оболочки.

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

    В этой ситуации процесс может называться демоном. Закрытие терминала его не убьет. Однако очень часто процессам-демонам предоставляется новый сеанс. На уровне API это делается с помощью системного вызова setsid . После использования процесс должен иметь:

    • Неизмененный PID.
    • Неизмененный PPID (ближайший суб-жнец).
    • Совершенно новый SID, обычно такой же, как его PID.
    • Совершенно новый GID, поскольку процессы из одной группы также должны находиться в одном сеансе.
    2
    27.01.2020, 22:13

    Теги

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