Update and clean Tomato RAF files
[tomato.git] / release / src / router / nginx / src / os / unix / ngx_daemon.c
blobab672110838cee75e3081daab35b3e16164648db
2 /*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
8 #include <ngx_config.h>
9 #include <ngx_core.h>
12 ngx_int_t
13 ngx_daemon(ngx_log_t *log)
15 int fd;
17 switch (fork()) {
18 case -1:
19 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed");
20 return NGX_ERROR;
22 case 0:
23 break;
25 default:
26 exit(0);
29 ngx_pid = ngx_getpid();
31 if (setsid() == -1) {
32 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "setsid() failed");
33 return NGX_ERROR;
36 umask(0);
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;
45 if (dup2(fd, STDIN_FILENO) == -1) {
46 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDIN) failed");
47 return NGX_ERROR;
50 if (dup2(fd, STDOUT_FILENO) == -1) {
51 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "dup2(STDOUT) failed");
52 return NGX_ERROR;
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;
60 #endif
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;
69 return NGX_OK;