daemon -
выполнение
в фоновом
режиме
Standard C library (
libc,
-lc)
#include <unistd.h>
int daemon(int nochdir, int noclose);
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 <
[email protected]> и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]