Hello, i'm working with a kind-of-daemon for my mp2 modules. I will u se on 
Linux but i'm doing the "testing" on a windows machine, and i am having 
troubles with fork processes and signal caching:
Procedure A is auto-forked and live in an infinite-loop.
Procedure B is a function (called by pointing to an URL) to stop this infinite 
loop.

procedure A
--------------------
...
my $stop = 1;
$SIG{INT} = $SIG{SIGKILL} = sub
 {
 $stop = 0;
 unlink $dir->{usersD}.'daemon.id';
 };

while ($stop)
 {
 sleep 1;
 ...
 }
--------------------



procedure B
--------------------
my $count = 0;
my $server;
while (-e $fileNamePID)
 {
 $server = $obj->get($fileNamePID));
#get the file content, string reference
 kill('INT',$$server);
 #kill('SIGKILL',$$server);
 $count++;
 last if $count > 40;
 }
--------------------



The problem is that sometimes the signal is received and the process finishes 
(but usually apache crashes), and sometimes (most of times) the signal is 
ignored.
I've realized that without the "sleep" instruction in the while loop the signal 
is always catched and the process finishes always, but sometimes apache crashes 
equally.

Procedure A is a forked process and the PID saved is a negative number.
my $child = fork();
return 'bye' if ($child);
(I know that under windows fork is an emulated procedure)


Questions i have:
- Why apache is crashing?
- Is the daemon ignoring the signals when it is sleeping?
- How modperl manage with forked procedures?

Thanks: Apache/2.0.48 (Win32) mod_perl/1.99_13-dev Perl/v5.8.2

--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html

Reply via email to