Annotation of embedaddon/nginx/src/os/unix/ngx_daemon.c, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #include <ngx_config.h>
                      9: #include <ngx_core.h>
                     10: 
                     11: 
                     12: ngx_int_t
                     13: ngx_daemon(ngx_log_t *log)
                     14: {
                     15:     int  fd;
                     16: 
                     17:     switch (fork()) {
                     18:     case -1:
                     19:         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
                     20:         return NGX_ERROR;
                     21: 
                     22:     case 0:
                     23:         break;
                     24: 
                     25:     default:
                     26:         exit(0);
                     27:     }
                     28: 
                     29:     ngx_pid = ngx_getpid();
                     30: 
                     31:     if (setsid() == -1) {
                     32:         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "setsid() failed");
                     33:         return NGX_ERROR;
                     34:     }
                     35: 
                     36:     umask(0);
                     37: 
                     38:     fd = open("/dev/null", O_RDWR);
                     39:     if (fd == -1) {
                     40:         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                     41:                       "open(\"/dev/null\") failed");
                     42:         return NGX_ERROR;
                     43:     }
                     44: 
                     45:     if (dup2(fd, STDIN_FILENO) == -1) {
                     46:         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDIN) failed");
                     47:         return NGX_ERROR;
                     48:     }
                     49: 
                     50:     if (dup2(fd, STDOUT_FILENO) == -1) {
                     51:         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDOUT) failed");
                     52:         return NGX_ERROR;
                     53:     }
                     54: 
                     55: #if 0
                     56:     if (dup2(fd, STDERR_FILENO) == -1) {
                     57:         ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDERR) failed");
                     58:         return NGX_ERROR;
                     59:     }
                     60: #endif
                     61: 
                     62:     if (fd > STDERR_FILENO) {
                     63:         if (close(fd) == -1) {
                     64:             ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "close() failed");
                     65:             return NGX_ERROR;
                     66:         }
                     67:     }
                     68: 
                     69:     return NGX_OK;
                     70: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>