Annotation of embedaddon/quagga/lib/daemon.c, revision 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>