Для чего используются процессы демона? [Дубликат]

Чтобы запустить сервер apache2 из терминала, запустите следующую команду.

sudo /etc/init.d/apache2 start

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

sudo update-rc.d apache2 enable
12
задан 22 December 2011 в 12:00

2 ответа

Короче говоря, демон - это фоновый процесс.

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

Разветвить процесс - значит создать его точную копию. Родителем этого процесса, если реальный родитель завершается сразу же, теперь является процесс init в /sbin/init, который первым запускается в каждой Unix-подобной операции система. Теперь этот процесс называется Daemon, с ним не связан TTY.

Вот пример демона в Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

Это, строго говоря, еще не один. Вам также нужно будет изменить текущий рабочий каталог, перенаправить стандартный ввод и вывод в лог-файлы и так далее. Вы можете прочитать подробности в этой статье в Википедии .

Если вы запустите пример, вы заметите, что через две секунды он печатает, даже если процесс, который вы запустили в командной строке завершился. Копия этого процесса запускается «сейчас» init.

15
ответ дан 4 November 2018 в 00:09
  • 1
    Если говорить более подробно, если вы переходите на Linux из Windows, вы можете думать о демонах как о * nix-эквиваленте «служб» Windows. – nathwill 16 February 2011 в 02:32
  • 2
    @ stefano-palazzo Вы сказали, что "... с ним не связан TTY", но потом "... вы заметите, что через две секунды он печатает ...". Я думал, что отключение TTY означает, что вы не можете писать в терминал. – Jorge Bucaran 23 June 2016 в 07:52
  • 3
    @JorgeBucaran Да. Печать немного капризная. Он все еще может иметь дескриптор стандартного потока вывода tty, который его запустил. Когда вы открываете файл (например, / dev / stdout), вы получаете число (называемое дескриптором файла), и это все, что вам нужно для записи в него, пока процесс, который его открыл, еще работает (вы можете увидеть открытые файлы в /proc/*/fd). Хорошо ведущий себя демон полностью отсоединится от tty, отказавшись от ручек для stdout, stderr и stdin. – Stefano Palazzo♦ 23 June 2016 в 08:08
  • 4
    @ StefanoPalazzo Я вижу. Можно сохранить ссылку на родительский процесс std / out / err и все же отсоединиться от него. Если я могу произвольно сохранить ссылку на TTY, что означает отсоединение процесса? Я нашел & lt; superuser.com/questions/178587/… & gt; полезно, но все еще неясно. – Jorge Bucaran 23 June 2016 в 09:09
  • 5
    @JorgeBucaran это означает перезаписать собственные stdio процессов (например, используя dup2 ) новыми, которые вы создали (например, лог-файл). Вот полный пример – Stefano Palazzo♦ 23 June 2016 в 09:17

В многозадачных компьютерных операционных системах демон - это компьютерная программа, которая запускается как фоновый процесс, а не находится под непосредственным контролем интерактивного пользователя. Традиционно имена процессов демона заканчиваются буквой d, чтобы прояснить, что процесс на самом деле является демоном, и провести различие между демоном и обычной компьютерной программой. Например, syslogd - это демон, который реализует средство ведения журнала системы, а sshd - это демон, который обслуживает входящие SSH-соединения.

Как вы можете видеть уровень демона

1
ответ дан 4 November 2018 в 00:09

Другие вопросы по тегам:

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