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
start-stop-daemon
в Debian; Я оставлю здесь связанный поток из переполнения стека stackoverflow.com/questions/16139940/…, который более интересен, чем необработанная страница руководстваОтветы:
Из статьи Википедии о демоне :
В среде Unix родительский процесс демона часто, но не всегда, является процессом init. Демон обычно создается процессом, который разветвляет дочерний процесс, а затем сразу же завершается, вызывая init принять дочерний процесс, или процессом init, непосредственно запускающим демон. Кроме того, демон, запускаемый путем разветвления и выхода, обычно должен выполнять другие операции, такие как отделение процесса от любого управляющего терминала (tty). Такие процедуры часто реализуются в различных вспомогательных процедурах, таких как daemon (3) в Unix.
Прочитайте man-страницу
daemon
функции.Запуск фоновой команды из оболочки, которая немедленно завершается, приводит к тому, что PPID процесса становится равным 1. Легко проверить:
Как видите, процесс принадлежит PID 1, но все еще связан с TTY. Если я выйду из этой оболочки входа в систему, войду снова и сделаю
ps
снова, TTY станет?
.Прочитайте здесь, почему важно отсоединиться от TTY .
Используя
setsid
(частьutil-linux
):Я думаю, вам даже не нужно перенаправлять stdin, stdout и stderr.
источник
bash -c
оболочку, TTY не ассоциируется с процессом. Это действительно так, как он продемонстрировал это.echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'
покажет вам, что это тот же самый TTY для обоих, но продемонстрированное поведение получения TTY по-?
прежнему происходит, даже если вы никогда не «выходите из оболочки» и не закрываете TTY.Deamon по своему названию - не более чем программа, которая работает до тех пор, пока 1. система не выключится; 2. предлагается остановить. Кроме этого, оно не имеет магического значения.
В этих условиях запуск сценария bash в фоновом режиме с помощью nohup может классифицировать его как процесс-демон.
Что вы ожидаете найти и не найти? Если у вас есть какие-либо проблемы, укажите их с примером кода и примерами сегментов данных, чтобы попросить о дальнейшей помощи. Ваш вопрос в его нынешнем виде слишком широкий / общий.
источник