Manpages - daemon.3

Table of Contents

NAME

daemon - run in the background

SYNOPSIS

  #include <unistd.h>

  int daemon(int nochdir, int noclose);

Feature Test Macro Requirements for glibc (see *feature_test_macros*(7)):

*daemon*():

      Since glibc 2.21:
          _DEFAULT_SOURCE
      In glibc 2.19 and 2.20:
          _DEFAULT_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)
      Up to and including glibc 2.19:
          _BSD_SOURCE || (_XOPEN_SOURCE && _XOPEN_SOURCE < 500)

DESCRIPTION

The *daemon*() function is for programs wishing to detach themselves from the controlling terminal and run in the background as system daemons.

If nochdir is zero, *daemon*() changes the process’s current working directory to the root directory (“/”); otherwise, the current working directory is left unchanged.

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.

RETURN VALUE

(This function forks, and if the *fork*(2) succeeds, the parent calls *_exit*(2), so that further errors are seen by the child only.) On success *daemon*() returns zero. If an error occurs, *daemon*() returns -1 and sets errno to any of the errors specified for the *fork*(2) and *setsid*(2).

ATTRIBUTES

For an explanation of the terms used in this section, see *attributes*(7).

Interface Attribute Value
*daemon*() Thread safety MT-Safe

CONFORMING TO

Not in POSIX.1. A similar function appears on the BSDs. The *daemon*() function first appeared in 4.4BSD.

NOTES

The glibc implementation can also return -1 when /dev/null exists but is not a character device with the expected major and minor numbers. In this case, errno need not be set.

BUGS

The GNU C library implementation of this function was taken from BSD, and does not employ the double-fork technique (i.e., *fork*(2), *setsid*(2), *fork*(2)) that is necessary to ensure that the resulting daemon process is not a session leader. Instead, the resulting daemon is a session leader. On systems that follow System V semantics (e.g., Linux), this means that if the daemon opens a terminal that is not already a controlling terminal for another session, then that terminal will inadvertently become the controlling terminal for the daemon.

SEE ALSO

*fork*(2), *setsid*(2), *daemon*(7), *logrotate*(8)

COLOPHON

This page is part of release 5.13 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.

Author: dt

Created: 2022-02-20 Sun 15:06