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.Dd February 27, 2023 29.Dt DAEMON 3 30.Os 31.Sh NAME 32.Nm daemon 33.Nd run in the background 34.Sh LIBRARY 35.Lb libc 36.Sh SYNOPSIS 37.In stdlib.h 38.Ft int 39.Fn daemon "int nochdir" "int noclose" 40.Ft int 41.Fn daemonfd "int chdirfd" "int nullfd" 42.Sh DESCRIPTION 43The 44.Fn daemon 45function is for programs wishing to detach themselves from the 46controlling terminal and run in the background as system daemons. 47.Pp 48If the argument 49.Fa nochdir 50is zero, 51.Fn daemon 52changes the current working directory to the root 53.Pq Pa / . 54.Pp 55If the argument 56.Fa noclose 57is zero, 58.Fn daemon 59redirects standard input, standard output, and standard error to 60.Pa /dev/null . 61.Pp 62The 63.Fn daemonfd 64function is equivalent to the 65.Fn daemon 66function except that arguments are the descriptors for the current working 67directory and to the descriptor to 68.Pa /dev/null . 69.Pp 70If 71.Fa chdirfd 72is equal to 73.Pq -1 74the current working directory is not changed. 75.Pp 76If 77.Fa nullfd 78is equals to 79.Pq -1 80the redirection of standard input, standard output, and standard error is not 81closed. 82.Sh RETURN VALUES 83.Rv -std daemon daemonfd 84.Sh ERRORS 85The 86.Fn daemon 87and 88.Fn daemonfd 89function may fail and set 90.Va errno 91for any of the errors specified for the library functions 92.Xr fork 2 93.Xr open 2 , 94and 95.Xr setsid 2 . 96.Sh SEE ALSO 97.Xr fork 2 , 98.Xr setsid 2 , 99.Xr sigaction 2 100.Sh HISTORY 101The 102.Fn daemon 103function first appeared in 104.Bx 4.4 . 105The 106.Fn daemonfd 107function first appeared in 108.Fx 12.0 . 109.Sh CAVEATS 110Unless the 111.Fa noclose 112argument is non-zero, 113.Fn daemon 114will close the first three file descriptors and redirect them to 115.Pa /dev/null . 116Normally, these correspond to standard input, standard output, and 117standard error. 118However, if any of those file descriptors refer to something else, they 119will still be closed, resulting in incorrect behavior of the calling program. 120This can happen if any of standard input, standard output, or standard 121error have been closed before the program was run. 122Programs using 123.Fn daemon 124should therefore either call 125.Fn daemon 126before opening any files or sockets, or verify that any file 127descriptors obtained have values greater than 2. 128.Pp 129The 130.Fn daemon 131function temporarily ignores 132.Dv SIGHUP 133while calling 134.Xr setsid 2 135to prevent a parent session group leader's calls to 136.Xr fork 2 137and then 138.Xr _exit 2 139from prematurely terminating the child process. 140