Демонизировать процесс в оболочке?


9

http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/ приводит пример демонизации процесса в bash:

$ nohup firefox& &> /dev/null

Если я не ошибаюсь, команда такая же, как "nohup and background a process". Но разве демон не является чем-то большим, чем простой процесс?

Какие шаги здесь отсутствуют, чтобы демонизировать процесс?

Например, не требуется ли изменение родительского процесса при демонизации процесса? Если да, как ты это делаешь в bash? Я все еще пытаюсь понять связанный ответ https://unix.stackexchange.com/a/177361/674 .

Какие еще шаги и условия?

Смотрите мой связанный вопрос https://stackoverflow.com/q/35705451/156458


1
зависит от вашего определения демонов. Если вы просто имеете в виду работать в фоновом режиме без подключения к терминалу, тогда да, вы запускаете firefox как демон. «стандартные» демоны, однако, обычно не запускаются пользователями, имеют сценарий инициализации и протоколирование, и, как правило, это своего рода защита, часто apparmor или selinux, в зависимости от того, используете ли вы Ubuntu или Fedora (или аналогичную систему). Смотрите linfo.org/daemon.html .
Пантера

1
Посмотрите start-stop-daemon в Debian; Я оставлю здесь связанный поток из переполнения стека stackoverflow.com/questions/16139940/…, который более интересен, чем необработанная страница руководства
Rui F Ribeiro

Ответы:


10

Из статьи Википедии о демоне :

В среде Unix родительский процесс демона часто, но не всегда, является процессом init. Демон обычно создается процессом, который разветвляет дочерний процесс, а затем сразу же завершается, вызывая init принять дочерний процесс, или процессом init, непосредственно запускающим демон. Кроме того, демон, запускаемый путем разветвления и выхода, обычно должен выполнять другие операции, такие как отделение процесса от любого управляющего терминала (tty). Такие процедуры часто реализуются в различных вспомогательных процедурах, таких как daemon (3) в Unix.

Прочитайте man-страницу daemonфункции.

Запуск фоновой команды из оболочки, которая немедленно завершается, приводит к тому, что PPID процесса становится равным 1. Легко проверить:

# bash -c 'nohup sleep 10000 &>/dev/null & jobs -p %1'
1936
# ps -p 1936
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     1936       1    9104       9552  cons0       1009 17:28:12 /usr/bin/sleep

Как видите, процесс принадлежит PID 1, но все еще связан с TTY. Если я выйду из этой оболочки входа в систему, войду снова и сделаю psснова, TTY станет ?.

Прочитайте здесь, почему важно отсоединиться от TTY .

Используя setsid(часть util-linux):

# bash -c 'cd /; setsid sleep 10000 </dev/null &>/dev/null & jobs -p %1'
9864
# ps -p 9864
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     9864       1    9864       6632  ?           1009 17:40:35 /usr/bin/sleep

Я думаю, вам даже не нужно перенаправлять stdin, stdout и stderr.


3
Посмотрите на демонизировать . Помимо хорошего инструмента, у него есть довольно хорошие объяснения того, что такое демон.
Джин Павловский

Мне просто любопытно, если вы знаете способ отделить процесс от tty, не выходя из оболочки, из которой был создан процесс?
StoneThrow

1
@StoneThrow "без выхода из оболочки, из которой был создан процесс" Если вы используете bash -cоболочку, TTY не ассоциируется с процессом. Это действительно так, как он продемонстрировал это.
Бруно Броноски

@StoneThrow, но выполнение этого теста echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'покажет вам, что это тот же самый TTY для обоих, но продемонстрированное поведение получения TTY по- ?прежнему происходит, даже если вы никогда не «выходите из оболочки» и не закрываете TTY.
Бруно Броноски

-1

Deamon по своему названию - не более чем программа, которая работает до тех пор, пока 1. система не выключится; 2. предлагается остановить. Кроме этого, оно не имеет магического значения.

В этих условиях запуск сценария bash в фоновом режиме с помощью nohup может классифицировать его как процесс-демон.

Что вы ожидаете найти и не найти? Если у вас есть какие-либо проблемы, укажите их с примером кода и примерами сегментов данных, чтобы попросить о дальнейшей помощи. Ваш вопрос в его нынешнем виде слишком широкий / общий.


Спасибо. Я думаю, что мой пост содержит все, что вы просили в своем последнем абзаце.
Тим

4
Хм, это не правда. У демона нет управляющего терминала, нет стандартного вывода, стандартного вывода и других вещей. Прочтите первый раздел из раздела software.clapper.org/daemonize
Рич Хомолка,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.