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
|
--- ../ddclient-orig/ddclient 2009-10-19 22:45:15.000000000 +1030
+++ ddclient 2009-10-19 22:50:11.000000000 +1030
@@ -307,6 +307,7 @@
my %variables = (
'global-defaults' => {
'daemon' => setv(T_DELAY, 0, 0, 1, 0, interval('60s')),
+ 'foreground' => setv(T_BOOL, 0, 0, 1, 0, undef),
'file' => setv(T_FILE, 0, 0, 1, "$etc$program.conf", undef),
'cache' => setv(T_FILE, 0, 0, 1, "$cachedir$program.cache", undef),
'pid' => setv(T_FILE, 0, 0, 1, "", undef),
@@ -535,6 +536,7 @@
"usage: ${program} [options]",
"options are:",
[ "daemon", "=s", "-daemon delay : run as a daemon, specify delay as an interval." ],
+ [ "foreground", "!", "-foreground : do not fork" ],
[ "proxy", "=s", "-proxy host : use 'host' as the HTTP proxy" ],
[ "server", "=s", "-server host : update DNS information on 'host'" ],
[ "protocol", "=s", "-protocol type : update protocol used" ],
@@ -623,7 +625,10 @@
$SIG{'HUP'} = sub { $caught_hup = 1; };
$SIG{'TERM'} = sub { $caught_term = 1; };
$SIG{'KILL'} = sub { $caught_kill = 1; };
-if (opt('daemon') && !opt('force')) {
+# don't fork() if foreground or force is on
+if (opt('foreground') || opt('force')) {
+ ;
+} elsif (opt('daemon')) {
$SIG{'CHLD'} = 'IGNORE';
my $pid = fork;
if ($pid < 0) {
@@ -633,12 +638,15 @@
exit 0;
}
$SIG{'CHLD'} = 'DEFAULT';
- $opt{'syslog'} = 1;
open(STDOUT, ">/dev/null");
open(STDERR, ">/dev/null");
open(STDIN, "</dev/null");
+}
+# write out the pid file if we're daemon'ized
+if(opt('daemon')) {
write_pid();
+ $opt{'syslog'} = 1;
}
umask 077;
|