1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
/*
daemonize.h - definition of functions for daemonising an application
Copyright (C) 2014 Arthur de Jong
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
*/
#ifndef NSLCD__DAEMONINZE_H
#define NSLCD__DAEMONINZE_H 1
/*
To properly run as a daemon an application should:
- close all open file descriptors (see daemonize_closefds() for that)
- (re)set proper signal handlers and signal mask
- sanitise the environment
- fork() / setsid() / fork() to detach from terminal, become process
leader and run in the background (see daemonize_daemon() for that)
- reconnect stdin/stdout/stderr to /dev/null (see
daemonize_redirect_stdio() for that)
- set the umask to a reasonable value
- chdir(/) to avoid locking any mounts
- drop privileges as appropriate
- chroot() if appropriate
- create and lock a pidfile
- exit the starting process if initialisation is complete (see
daemonize_ready() for that)
*/
/* This closes all open file descriptors, except stdin, stdout and stderr. */
void daemonize_closefds(void);
/* Redirect stdio, stdin and stderr to /dev/null. */
void daemonize_redirect_stdio(void);
/* Detach from the controlling terminal and run in the background. This
function does:
- double fork and exit first child
- in the first child call setsid() to detach from any terminal and
create an independent session
- keep the parent process waiting until a call to daemonize_ready() is
done by the daemon process
This function returns either an error which indicates that the
daemonizing failed for some reason (usually sets errno), or returns
without error indicating that the process has been daemonized. */
int daemonize_daemon(void);
/* Signal that the original parent may exit because the service has been
initialised. The status indicates the exit code of the original process and
message, if not NULL or an empty string, is printed to stderr. */
void daemonize_ready(int status, const char *message);
#endif /* not NSLCD__DAEMONINZE_H */
|