use POSIX ":sys_wait_h"; # Didn't do this before. my $spid; print "Launching \"$actual_prog\" as UID($uid)/GID($gid)\n"; unless (my $pid=fork()) { # Re-direct $program's STDERR to a file on the hard disk open(STDERR,">> $logfile"); $spid = open2(*SREAD, *SWRITE, "$program @prog_options"); while(1) { if($got_sig==1) { print STDOUT "GOT SIGNAL on $0\n"; print SWRITE "Hey there server process\n"; sleep 0.5; kill('KILL',$spid); exit(0); }else{ my $der = waitpid($spid,WNOHANG); # If return val < 0. It ended ... if($der==-1) { print STDOUT "Time to re-launch\n"; open(STDERR,">> $logfile"); $spid = open2(*SREAD, *SWRITE, "$program @prog_options"); } } } } #### my $der = waitpid($spid,WNOHANG); if($der==-1) { print STDOUT "Time to re-launch\n"; open(STDERR,">> $logfile"); $spid = open2(*SREAD, *SWRITE, "$program @prog_options"); }