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>