3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
8 #include <ngx_config.h>
13 ngx_daemon(ngx_log_t
*log
)
19 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
, "fork() failed");
29 ngx_pid
= ngx_getpid();
32 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
, "setsid() failed");
38 fd
= open("/dev/null", O_RDWR
);
40 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
,
41 "open(\"/dev/null\") failed");
45 if (dup2(fd
, STDIN_FILENO
) == -1) {
46 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
, "dup2(STDIN) failed");
50 if (dup2(fd
, STDOUT_FILENO
) == -1) {
51 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
, "dup2(STDOUT) failed");
56 if (dup2(fd
, STDERR_FILENO
) == -1) {
57 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
, "dup2(STDERR) failed");
62 if (fd
> STDERR_FILENO
) {
63 if (close(fd
) == -1) {
64 ngx_log_error(NGX_LOG_EMERG
, log
, ngx_errno
, "close() failed");