Annotation of embedaddon/quagga/lib/daemon.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Daemonize routine
3: * Copyright (C) 1997, 1999 Kunihiro Ishiguro
4: *
5: * This file is part of GNU Zebra.
6: *
7: * GNU Zebra is free software; you can redistribute it and/or modify
8: * it under the terms of the GNU General Public License as published
9: * by the Free Software Foundation; either version 2, or (at your
10: * option) any later version.
11: *
12: * GNU Zebra is distributed in the hope that it will be useful, but
13: * WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * General Public License for more details.
16: *
17: * You should have received a copy of the GNU General Public License
18: * along with GNU Zebra; see the file COPYING. If not, write to the
19: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20: * Boston, MA 02111-1307, USA.
21: */
22:
23: #include <zebra.h>
24: #include <log.h>
25:
26: #ifndef HAVE_DAEMON
27:
28: /* Daemonize myself. */
29: int
30: daemon (int nochdir, int noclose)
31: {
32: pid_t pid;
33:
34: pid = fork ();
35:
36: /* In case of fork is error. */
37: if (pid < 0)
38: {
39: zlog_err ("fork failed: %s", safe_strerror(errno));
40: return -1;
41: }
42:
43: /* In case of this is parent process. */
44: if (pid != 0)
45: exit (0);
46:
47: /* Become session leader and get pid. */
48: pid = setsid();
49:
50: if (pid == -1)
51: {
52: zlog_err ("setsid failed: %s", safe_strerror(errno));
53: return -1;
54: }
55:
56: /* Change directory to root. */
57: if (! nochdir)
58: chdir ("/");
59:
60: /* File descriptor close. */
61: if (! noclose)
62: {
63: int fd;
64:
65: fd = open ("/dev/null", O_RDWR, 0);
66: if (fd != -1)
67: {
68: dup2 (fd, STDIN_FILENO);
69: dup2 (fd, STDOUT_FILENO);
70: dup2 (fd, STDERR_FILENO);
71: if (fd > 2)
72: close (fd);
73: }
74: }
75:
76: umask (0027);
77:
78: return 0;
79: }
80:
81: #endif /* HAVE_DAEMON */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>