---
name: "daemon"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/daemon/3"
---

# daemon(3)

run in the background

## NAME

daemon - run in the background

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <unistd.h>
```

**int daemon(int** *nochdir***, int** *noclose***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**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)](/fork/2.md) succeeds, the parent calls [**\_exit**(3)](/_exit/3.md), 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)](/fork/2.md) and [**setsid**(2)](/setsid/2.md).

## ATTRIBUTES

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

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

## VERSIONS

A similar function appears on the BSDs.

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.

## STANDARDS

None.

## HISTORY

4\.4BSD.

## 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)](/fork/2.md), [**setsid**(2)](/setsid/2.md), [**fork**(2)](/fork/2.md)) 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)](/fork/2.md), [**setsid**(2)](/setsid/2.md), [**daemon**(7)](/daemon/7.md), [**logrotate**(8)](/logrotate/8.md)
