comparison src/os/unix/ngx_daemon.c @ 0:f0b350454894 NGINX_0_1_0

nginx 0.1.0 *) The first public version.
author Igor Sysoev <http://sysoev.ru>
date Mon, 04 Oct 2004 00:00:00 +0400
parents
children 6cfc63e68377
comparison
equal deleted inserted replaced
-1:000000000000 0:f0b350454894
1
2 /*
3 * Copyright (C) Igor Sysoev
4 */
5
6
7 #include <ngx_config.h>
8 #include <ngx_core.h>
9
10
11 int ngx_daemon(ngx_log_t *log)
12 {
13 int fd;
14
15 switch (fork()) {
16 case -1:
17 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
18 return NGX_ERROR;
19
20 case 0:
21 break;
22
23 default:
24 exit(0);
25 }
26
27 ngx_pid = ngx_getpid();
28
29 if (setsid() == -1) {
30 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "setsid() failed");
31 return NGX_ERROR;
32 }
33
34 umask(0);
35
36 fd = open("/dev/null", O_RDWR);
37 if (fd == -1) {
38 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
39 "open(\"/dev/null\") failed");
40 return NGX_ERROR;
41 }
42
43 if (dup2(fd, STDIN_FILENO) == -1) {
44 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDIN) failed");
45 return NGX_ERROR;
46 }
47
48 if (dup2(fd, STDOUT_FILENO) == -1) {
49 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDOUT) failed");
50 return NGX_ERROR;
51 }
52
53 #if 0
54 if (dup2(fd, STDERR_FILENO) == -1) {
55 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDERR) failed");
56 return NGX_ERROR;
57 }
58 #endif
59
60 if (fd > STDERR_FILENO) {
61 if (close(fd) == -1) {
62 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "close() failed");
63 return NGX_ERROR;
64 }
65 }
66
67 return NGX_OK;
68 }