Forking in Window enviroment

H

Herman Chan

Hi:

I have the following script

==========================================

#!D:/Perl/bin/Perl.exe -w

use strict;
use CGI ":standard";
$| = 1;

my $MYFILE = "D:\\Apache\\logs\\mgmtwrkstn\\lucky.txt";

if (param("monitor")) {
&monitor();
} else {
if (fork) { # only need to fork for IE
print redirect(-uri => url() . "?monitor=yes",
-nph=>1);
} else {
&do_stuff();
}
sub monitor
{
my $html = &draw_page();

if (defined $html) {
print header(-refresh=>1, -nph=>1), $html;
} else {
print header(-nph=>1), &goodbye();
}
}
sub goodbye
{
return start_html(-title=>"Goodbye!") . h1("Goodbye!") .
end_html();
}
sub get_number
{
open NUMBER, "<$MYFILE" or return undef;
my $number = @glo;
close NUMBER;

return $number;
}
sub draw_page
{
my $number = &get_number();

return (defined $number) ? start_html(-title=>"Your Lucky
Number") . p("Your lucky number is $number.") . end_html() : undef;
}

sub do_stuff
{
for my $i (1 .. 10)
{
open NUMBER2, ">$MYFILE";
print NUMBER2 $i;
close NUMBER2;


sleep 1;
}

unlink $MYFILE;
}

=========================================================

What this script essentially do is that it forks a child process to
write 1 to 10 on some file, while writing it, the parent process will
refresh the page every second to read the content of that file. This
script is orginally from
http://hypernews.ngdc.noaa.gov/HyperNews/get/webscience/2/6/1.html?nogifs

It works under Unix environment with apache. However, when I run this
script in W2K and apache 1.3.x. It doesn't work. It seems like that
the child process is locking the files its writing to and the parent
process can't go into it. Therefore, the parent process doesn't
refresh the page until the child process unlink ("delete") the file.
Can anyone help me on this one? I am a newbie on Perl and CGI and I
want to continuosly monitor some background job on a web page.

Thanks
Herman
 
G

Graham Wood

You could try using Win32::process in place of fork. This will mean
that it won't run on Unix any more but if you are running on Win2K, this
is a good way of launching child processes and watching what they do.

See
http://aspn.activestate.com/ASPN/CodeDoc/libwin32/Process/Process.html
or perldoc Win32::process for details.

I see another module called Win32::procFarm on Activestates web site
too. This may be a new improved version of Win32::process.

Hope this helps.

Graham
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,708
Latest member
SherleneF1

Latest Threads

Top