| daemon(3) | Library Functions Manual | daemon(3) |
daemon - выполнение в фоновом режиме
Стандартная библиотека языка C (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 |
A similar function appears on the BSDs.
Реализация в glibc может также возвращать -1 в случаях, когда /dev/null существует, но не является файлом символьного устройства с ожидаемыми основным и вспомогательным номерами. В этом случае нет необходимости устанавливать errno.
Отсутствуют.
4.4BSD.
Для библиотеки GNU C реализация этой функции была взята из BSD, и в ней не применяется техника двойного fork (т. е., fork(2), setsid(2), fork(2)), поэтому необходимо проверить, что полученный процесс службы не является лидером сеанса. Вместо этого полученная служба является лидером сеанса. В системах, следующих семантике System V (например, Linux), это означает, что если служба открывает терминал, которой пока не является управляющим для другого сеанса, то этот терминал непреднамеренно станет управляющим терминалом для службы.
Русский перевод этой страницы руководства разработал(и) Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 2 мая 2024 г. | Справочные страницы Linux 6.9.1 |