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>