VideoTools
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
gdaemon.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2017 Graeme Walker
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 // ===
17 ///
18 /// \file gdaemon.h
19 ///
20 
21 #ifndef G_DAEMON_H
22 #define G_DAEMON_H
23 
24 #include "gdef.h"
25 #include "gexception.h"
26 #include "gpidfile.h"
27 #include "gpath.h"
28 #include <sys/types.h>
29 #include <string>
30 
31 namespace G
32 {
33  class Daemon ;
34 }
35 
36 /// \class G::Daemon
37 /// A static interface for daemonising the calling process. Daemonisation
38 /// includes fork()ing, detaching from the controlling terminal, setting the
39 /// process umask, etc. The windows implementation does nothing.
40 /// \see G::Process
41 ///
42 class G::Daemon
43 {
44 public:
45  G_EXCEPTION( CannotFork , "cannot fork" ) ;
46 
47  static void detach() ;
48  ///< Detaches from the parent environment.
49  ///< This typically involves fork()ing,
50  ///< _exit()ing the parent, and calling
51  ///< setsid() in the child.
52 
53  static void detach( PidFile & pid_file ) ;
54  ///< An overload which allows for a delayed write
55  ///< of the new process-id to a file.
56  ///<
57  ///< A delayed write is useful for network daemons
58  ///< which open a listening port. A second instance
59  ///< of the process will fail on startup, and should
60  ///< not overwrite the pid file of the running
61  ///< server. In this situation PidFile::commit()
62  ///< should be called just before entering the event
63  ///< loop.
64  ///<
65  ///< Throws PidFile::Error on error.
66 
67 private:
68  Daemon() ;
69  static void setsid() ;
70 } ;
71 
72 #endif
73 
A static interface for daemonising the calling process.
Definition: gdaemon.h:42
static void detach()
Detaches from the parent environment.
A class for creating pid files.
Definition: gpidfile.h:55