BEGIN { if ($^O eq 'MSWin32') { eval <<'*END*'; use Win32::Daemon::Simple Service => 'SERVICENAME', Name => 'SERVICE NAME', Version => 'x.x', Info => { display => 'SERVICEDISPLAYNAME', description => 'SERVICEDESCRIPTION', }, Params => {}; *END* die $@ if $@; } else { eval <<'*END*'; # do whatever you need to make it a daemon under Unix sub DoEvents { # check the value of the variable you set in $SIG{...} handlers # and stop if asked to } *END* die $@ if $@; } } while (1) { # do something sleep(60); DoEvents(); } __END__