Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DAEMON(3)		    Library Functions Manual		     DAEMON(3)

NAME
       daemon -- run in	the background

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<stdlib.h>

       int
       daemon(int nochdir, int noclose);

       int
       daemonfd(int chdirfd, int nullfd);

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

       If  the	argument nochdir is zero, daemon() changes the current working
       directory to the	root (/).

       If the argument noclose is zero,	 daemon()  redirects  standard	input,
       standard	output,	and standard error to /dev/null.

       The  daemonfd()	function is equivalent to the daemon() function	except
       that arguments are the descriptors for the  current  working  directory
       and to the descriptor to	/dev/null.

       If  chdirfd  is	equal  to  (-1)	 the  current working directory	is not
       changed.

       If nullfd is equals to (-1) the redirection of standard input, standard
       output, and standard error is not closed.

RETURN VALUES
       The daemon() and	daemonfd() functions return the	value 0	if successful;
       otherwise the value -1 is returned and the global variable errno	is set
       to indicate the error.

ERRORS
       The daemon() and	daemonfd() function may	fail and set errno for any  of
       the  errors  specified  for  the	library	functions fork(2) open(2), and
       setsid(2).

SEE ALSO
       fork(2),	setsid(2), sigaction(2)

HISTORY
       The daemon() function first appeared in 4.4BSD.	The  daemonfd()	 func-
       tion first appeared in FreeBSD 12.0.

CAVEATS
       Unless  the noclose argument is non-zero, daemon() will close the first
       three file descriptors and redirect them	to /dev/null.  Normally, these
       correspond to standard input,  standard	output,	 and  standard	error.
       However,	if any of those	file descriptors refer to something else, they
       will  still  be	closed,	resulting in incorrect behavior	of the calling
       program.	 This can happen if any	of standard input, standard output, or
       standard	error have been	closed before the program was  run.   Programs
       using daemon() should therefore either call daemon() before opening any
       files  or  sockets,  or	verify that any	file descriptors obtained have
       values greater than 2.

       The  daemon()  function	temporarily  ignores  SIGHUP   while   calling
       setsid(2)  to  prevent a	parent session group leader's calls to fork(2)
       and then	_exit(2) from prematurely terminating the child	process.

FreeBSD	14.3		       February	27, 2023		     DAEMON(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=daemonfd&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help