daemon(3)

ИМЯ
daemon - выполнение в фоновом режиме

LIBRARY
Standard C library (libc, -lc)

СИНТАКСИС
#include <unistd.h>

int daemon(int nochdir, int noclose);

    Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

daemon():
    начиная с glibc 2.21:
        _DEFAULT_SOURCE
    в glibc 2.19 и 2.20:
        _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
    до glibc 2.19, включительно:
        _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

ОПИСАНИЕ
Функция daemon() необходима для того, чтобы отключить программу от управляющего терминала и запустить её в фоновом режиме подобно тому, как выполняются системные службы.

Если аргумент nochdir равен нулю, то daemon() изменяет текущий рабочий каталог процесса на корневой («/»); в противном случае текущий рабочий каталог не изменяется.

If noclose is zero, daemon() redirects standard input, standard output, and standard error to /dev/null; otherwise, no changes are made to these file descriptors.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Эта функция порождает новый процесс и, если fork(2) завершается без ошибок, родительский процесс вызывает _exit(2), чтобы дальнейшие ошибки воспринимались только дочерним процессом. В случае успешного выполнения daemon() возвращается ноль. Если возникла ошибка, то daemon() возвращает -1 и присваивает глобальной переменной errno одно из значений, указанных для fork(2) и setsid(2).

АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение
daemon() | Безвредность в нитях | MT-Safe

СТАНДАРТЫ
Отсутствует в POSIX.1. Подобная функция есть в BSD. Впервые функция daemon() появилась в 4.4BSD.

ЗАМЕЧАНИЯ
Реализация в glibc может также возвращать -1 в случаях, когда /dev/null существует, но не является файлом символьного устройства с ожидаемыми основным и вспомогательным номерами. В этом случае нет необходимости устанавливать errno.

ДЕФЕКТЫ
Для библиотеки GNU C реализация этой функции была взята из BSD, и в ней не применяется техника двойного fork (т. е., fork(2), setsid(2), fork(2)), поэтому необходимо проверить, что полученный процесс службы не является лидером сеанса. Вместо этого полученная служба является лидером сеанса. В системах, следующих семантике System V (например, Linux), это означает, что если служба открывает терминал, которой пока не является управляющим для другого сеанса, то этот терминал непреднамеренно станет управляющим терминалом для службы.

СМ. ТАКЖЕ
fork(2), setsid(2), daemon(7), logrotate(8)

ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.