Click here to get back home

problem with using the forks module within a daemon setting

 HomeNewsGroups | Search | About
 comp.lang.perl.modules    Post an article   get this group's latest topics as an RSS feed add this group's latest topics to your My MSN content add this group's latest topics to your My Yahoo content
Subject Author Date
problem with using the forks module within a daemon setting Dave 06-19-2006
Posted by Dave on June 19, 2006, 3:13 pm
Please log in for more thread options


Hi,

I have a program that I have been running via cron that I thought might
be better run by running it as a daemon. When I created some test
daemon programs they all worked. When I placed my program inside of the
while loop, I noticed that the daemon killed its self somehow. I then
figured out that it died just after it tried launching a new fork
process -- and when I commented this out it worked fine.

I made some sample code based on how I am doing this. I have it set to
print output to the screen. I have it below to not use threads. That
will let you see what it is supposed to do. Then, if you uncomment the
'use forks' statement, comment the line beginning with &browserbuilder,
and uncomment the line starting with $=threads you will see what it
does in a threads-based setup.

Can anyone provide any insight in to why this is not working and
perhaps give some advice for what I need to do?

Thanks,
~dave

PS> I would like to use forks instead of threads although I have them
both in the program for testing.

----------------------------


#!/usr/bin/perl

use POSIX qw(setsid);

&daemonize;

#use forks;
#use threads;
#uncomment one of two above modules to use that package for threading
use strict;

while(1) {

my (@urls,@urls2,$ib,$i);
$ib="a";
print "Started at " . `date` . "\n\n";

@urls=qw/1 2 3 4 5 6 7 8 9 10/;

foreach my $xurlid(@urls)
{

$i=$ib . $xurlid; #makes each thread object unique by adding
it's url id to '$ib' defined above
print "about to fork $xurlid thread\n";
#$=threads->create(\&browserbuilder, $xurlid, 'dave');
#uncomment above to use thread-based setup
&browserbuilder($xurlid,'dave');
#uncomment above to use non-thread setup
push @urls2, $i; #used for checking thread status later
select(undef, undef, undef, 0.07); #sleep for 70 milliseconds
}

###########
# Go through each thread and wait for it to close so the program
doesn't exit early
#foreach my $url(@urls2)
# {
# @ = $->join();
# print "$url returned: $[0]\n";
# }
###########
print "Ended at " . `date` . "\n\n";
sleep 10;
}
#end loop

sub browserbuilder
{

my $num=shift @_;
my $name=shift @_;

print "\n$name forked $num correctly\n\n";
return 0;

}

sub daemonize {
chdir '/' or die "Can't chdir to /: $!";
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
# open STDOUT, '>>/var/log/uu_info.log' or die "Can't write to
/dev/null: $!";
open STDERR, '>>/var/log/uu_errors.log' or die "Can't write to
/dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
umask 0;
}


Posted by xhoster on June 19, 2006, 8:03 pm
Please log in for more thread options


> Hi,
>
> I have a program that I have been running via cron that I thought might
> be better run by running it as a daemon. When I created some test
> daemon programs they all worked. When I placed my program inside of the
> while loop, I noticed that the daemon killed its self somehow. I then
> figured out that it died just after it tried launching a new fork
> process -- and when I commented this out it worked fine.

Please don't multipost. See my response in comp.lang.perl.misc

Xho

--
-------------------- http://NewsReader.Com/ --------------------
Usenet Newsgroup Service $9.95/Month 30GB

Posted by Dave on June 20, 2006, 10:20 am
Please log in for more thread options


Sorry Xho -- after I posted it here I thought it would be better in the
.misc group. I couldn't find how to delete it. I'll post there first
next time. Thanks for your help.

xhoster@gmail.com wrote:
> > Hi,
> >
> > I have a program that I have been running via cron that I thought might
> > be better run by running it as a daemon. When I created some test
> > daemon programs they all worked. When I placed my program inside of the
> > while loop, I noticed that the daemon killed its self somehow. I then
> > figured out that it died just after it tried launching a new fork
> > process -- and when I commented this out it worked fine.
>
> Please don't multipost. See my response in comp.lang.perl.misc
>
> Xho
>
> --
> -------------------- http://NewsReader.Com/ --------------------
> Usenet Newsgroup Service $9.95/Month 30GB


Similar ThreadsPosted
Win32::Daemon - multiple processor problem August 10, 2004, 6:03 am
ANNOUNCE: new module: Daemon::Generic October 26, 2006, 4:31 pm
Forks.pm compile problems March 1, 2006, 10:07 am
Setting up mod_perl2 on apache2 , Windows XP Box September 2, 2005, 12:37 pm
Setting file permissions in ExtUtils::MakeMaker January 25, 2005, 5:15 am
Term::Cap -- Setting terminal type under Windows XP May 24, 2006, 1:46 pm
Term::Cap -- Setting terminal type under Windows XP May 29, 2006, 9:22 pm
Net::SFTP - setting binary mode on Windows January 17, 2007, 5:55 am
Net::Daemon::SSL January 18, 2006, 11:35 pm
Combining HTTP:Daemon and CGI May 27, 2006, 5:07 pm

Our other projects:

Art Dolls, Fairies and Mermaids - Sunnyfaces.net

Roy's Linux, Programming and Search Engines messages

1-Script XML SitemapXML Sitemap