--- fam_mirror.orig 2003-12-12 00:05:11.000000000 +0800 +++ fam_mirrord 2003-12-12 22:16:38.000000000 +0800 @@ -45,6 +45,7 @@ use File::Basename; use File::Find; use SGI::FAM; +use POSIX; #start a fam object my $fam=new SGI::FAM; @@ -102,7 +103,38 @@ # for the timebeing you can run it with & # perhaps I will use POE at somepoint with this -while (1) { +# Put the program in DAEMON mode... Z +my $pidFile = '/var/run/fam_mirrord.pid'; +chdir("/") + or die "Couldn't chdir to /: $!"; +open STDIN, '/dev/null' or die "Can't read /dev/null: $!"; +open STDOUT, '>>/dev/null' or die "Can't write to /dev/null: $!"; +open STDERR, '>>/dev/null' or die "Can't write to /dev/null: $!"; +umask 0; +my $pid = fork; +if ($pid) # parent: save PID +{ + open PIDFILE, ">$pidFile" or die "can't open $pidFile: $!\n"; + print PIDFILE $pid; + close PIDFILE; + exit 0; +} +die "Couldn't fork: $!" unless defined($pid); + +POSIX::setsid() + or die "Can't start a new session: $!"; + +my $time_to_die = 0; + +sub signal_handler { + $time_to_die = 1; +} + +$SIG{INT} = $SIG{TERM} = $SIG{HUP} = &signal_handler; +# trap or ignore $SIG{PIPE} + + +while ($time_to_die) { do { $event=$fam->next_event; $dir=$fam->which($event);