Thanks Wiggins!

Turns out I hadn't pointed STDOUT somewhere away from the terminal, but I
wouldn't have caught that without your suggestion.

- Bryan




> Bryan R Harris wrote:
>> 
>> I'm building a simple daemon in perl ("ko") that fires off processes as soon
>> as the loading on our batch server is low enough to handle them.  Someday I
>> hope to put in some custom logic that runs more at night, fewer in the day,
>> etc.
>> 
>> Problem:  I can launch the daemon on the irix server, but I can't logout
>> unless I kill the daemon.
>> 
>> ralph% rlogin spock
>> spock% ko
>> Starting batch job (pid: 2885166), 24 input files found.
>> Progress recorded in file ko.out.
>> spock% logout
>> 
>> ... Here it hangs until I open a new window, rlogin spock, do a "killall
>> ko", then it drops me back to a prompt on ralph.
>> 
>> Any ideas?  Below is the daemon code, adapted from the Perl Cookbook.
>> 
> 
> IIRC, you have to double fork and exit. You might consider using the
> Proc::Daemon module instead. It handles all of these steps very
> conveniently, or at least have a scan of the source to see if you can
> adapt it.
> 
> http://danconia.org
> 
> 
>> Thanks!!
>> 
>> - Bryan
>> 
>> **************************************
>> use POSIX 'setsid';
>> $SIG{CHLD} = 'IGNORE';  # don't wait for children to exit
>> 
>> # turn myself into a daemon (background myself)
>> $pid = fork and exit(0);
>> defined($pid) or die "$me: Couldn't background: $!, exiting.\n";
>> POSIX::setsid() or die "$me: Couldn't start a new session: $!, exiting.\n";
>> for my $handle (*STDIN, *STDERR) {
>>     open($handle, "+<", "/dev/null") or die "$me:  Can't reopen $handle to
>> /dev/null: $!.  Exiting.\n";
>> }
>> 
>> # open ko.out file for further recording
>> $outfile = "ko.out";
>> open(KOFILE,">$outfile") or die "ko:  Couldn't open $outfile:  $!\n";
>> print "Starting batch job (pid: $$), $tn input files found.\n";
>> print "Progress recorded in file $outfile.\n";
>> select KOFILE;  # push all STDOUT to KOFILE
>> $| = 1;         # and don't buffer it
>> print "Starting batch job (pid: $$), $tn input files found.\n";
>> 
>> **************************************
>> 
>> 
>> 
>> 
>> 



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to