#!/usr/bin/perl -w use strict; BEGIN { print(qq[\n\nproc $$ beginning now.\n\n]) } END { print(qq[\n\nproc $$ exiting now.\n\n]) } my($reminder) = ''; my($debugging) = 0; my($deamon) = 0; my($remaining) = 0; my($attempted) = 0; my($alarm) = 0; my($wait) = 0; my($inc) = 5; my($now) = time(); my($n) = qq[\n]; # %=%=%=%=%=%=%=%=%=%=%= FORKING =%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%= { # spawn child process, exit; deamonize child my($pid) = fork; ++$|; die(qq[Can't spawn daemon! $!]) if (!defined($pid)); exit if ($pid); # spawn subdeamon process, exit my($piid) = fork; ++$|; die(qq[Can't spawn subdaemon! $!]) if (!defined($piid)); exit if ($piid); # at this point we are the daemon # we just wait around and do nothing until time is up while (time < $now + ($alarm)) { $remaining = $alarm - $wait; my($snooze) = ($remaining < $inc) ? $remaining : $inc; $snooze = sprintf('%.0f', $snooze); print(<<__snooze__) if $debugging; $remaining seconds remaining. going to snooze for $snooze seconds... __snooze__ if ($snooze) { sleep( $snooze ) } else { last } $wait += $inc; } # time is up now, make something happen here. { next } } # %=%=%=%=%=%=%=%=%=%=%= DONE FORKING =%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=