use strict; use warnings; keep_alive(1); sub main_program { my $x = 10; while($x--) { print STDERR "sleep $x"; sleep(5); } } sub keep_alive { my $first = shift; my $timeout = eval { local $SIG{ALRM} = sub {print "SERVER-PING!\n"; keep_alive(0)}; alarm(15); main_program() if $first == 1; alarm(0); }; }