sub slumber { # signal-safe sleep, added my $span = shift; $span -= sleep $span while $span > 0; 1; } $SIG{CHLD} = 'IGNORE'; while (1) { defined( my $cpid = fork ) or warn $! and slumber 5 and next; slumber 5 and next if $cpid; # parent # $SIG{INT} = $SIG{HUP} = sub {}; # child $SIG{INT} = $SIG{HUP} = 'IGNORE'; # child exec qw(rsync -a rsync://blah.example.com/foo foo); die 'exec failed'; }