1.\" Copyright (c) 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the University nor the names of its contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" @(#)daemon.3 8.1 (Berkeley) 6/9/93 29.\" $FreeBSD$ 30.\" 31.Dd December 23, 2017 32.Dt DAEMON 3 33.Os 34.Sh NAME 35.Nm daemon 36.Nd run in the background 37.Sh LIBRARY 38.Lb libc 39.Sh SYNOPSIS 40.In stdlib.h 41.Ft int 42.Fn daemon "int nochdir" "int noclose" 43.Ft int 44.Fn daemonfd "int chdirfd" "int nullfd" 45.Sh DESCRIPTION 46The 47.Fn daemon 48function is for programs wishing to detach themselves from the 49controlling terminal and run in the background as system daemons. 50.Pp 51Unless the argument 52.Fa nochdir 53is non-zero, 54.Fn daemon 55changes the current working directory to the root 56.Pq Pa / . 57.Pp 58Unless the argument 59.Fa noclose 60is non-zero, 61.Fn daemon 62will redirect standard input, standard output, and standard error to 63.Pa /dev/null . 64.Pp 65The 66.Fn daemonfd 67function is equivalent to the 68.Fn daemon 69function except that arguments are the descriptors for the current working 70directory and to the descriptor to 71.Pa /dev/null . 72.Pp 73If 74.Fa chdirfd 75is equal to 76.Pq -1 77the current working directory is not changed. 78.Pp 79If 80.Fa nullfd 81is equals to 82.Pq -1 83the redirection of standard input, standard output, and standard error is not 84closed. 85.Sh RETURN VALUES 86.Rv -std daemon daemonfd 87.Sh ERRORS 88The 89.Fn daemon 90and 91.Fn daemonfd 92function may fail and set 93.Va errno 94for any of the errors specified for the library functions 95.Xr fork 2 96.Xr open 2 , 97and 98.Xr setsid 2 . 99.Sh SEE ALSO 100.Xr fork 2 , 101.Xr setsid 2 , 102.Xr sigaction 2 103.Sh HISTORY 104The 105.Fn daemon 106function first appeared in 107.Bx 4.4 . 108The 109.Fn daemonfd 110function first appeared in 111.Fx 12.0 . 112.Sh CAVEATS 113Unless the 114.Fa noclose 115argument is non-zero, 116.Fn daemon 117will close the first three file descriptors and redirect them to 118.Pa /dev/null . 119Normally, these correspond to standard input, standard output, and 120standard error. 121However, if any of those file descriptors refer to something else, they 122will still be closed, resulting in incorrect behavior of the calling program. 123This can happen if any of standard input, standard output, or standard 124error have been closed before the program was run. 125Programs using 126.Fn daemon 127should therefore either call 128.Fn daemon 129before opening any files or sockets, or verify that any file 130descriptors obtained have values greater than 2. 131.Pp 132The 133.Fn daemon 134function temporarily ignores 135.Dv SIGHUP 136while calling 137.Xr setsid 2 138to prevent a parent session group leader's calls to 139.Xr fork 2 140and then 141.Xr _exit 2 142from prematurely terminating the child process. 143