Linux repositories inspector
GNU
2017-11-26

man-pages-ru

Russian man pages from the Linux Documentation Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

ИМЯ

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

ОБЗОР

#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() изменяет текущий рабочий каталог процесса на корневой («/»); в противном случае текущий рабочий каталог не изменяется.
Если аргумент noclose равен нулю, то daemon() перенаправляет стандартный поток ввода, вывода и ошибок в /dev/null; в противном случае данные файловые дескрипторы не изменяется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

Эта функция порождает новый процесс и, если 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), это означает, что если служба открывает терминал, которой пока не является управляющим для другого сеанса, то этот терминал непреднамеренно станет управляющим терминалом для службы.

СМОТРИТЕ ТАКЖЕ

⇧ Top