Annotation of embedaddon/nginx/src/os/unix/ngx_daemon.c, revision 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>