Strange behaviour with perl and apache

D

David Cantin

Hi

I have some troubles with a long system() sub-process (from 30 sec to
30 min) called from a CGI.

My web page have to wait the end of the system() call before finishing
it's loadding but this is not whats appen. The web page is waiting for
a couple of minutes but continue and finish it's loadding before the
end of program called by the system() call

Here a part of my "pseudo" code :

^- other code (html stuff)...

if (!is_lock($file_name, $file_date)){
lock($file_name, $file_date)
system "path_to_long_execution_prog $file_name $file_date";
my $exit_value = wait();
unlock($file_name, $file_date)
} else {
log("Error :: Trying to redo the system call ?!?");
}

and yes, I got "Error :: Trying to redo the system call ?!?" in my log
and is not suppose to... and I don't know why !

I run on a AIX server whith apache 1.3.27 and perl 5.005_02

Dave
 
J

Jim Gibson

David said:
Hi

I have some troubles with a long system() sub-process (from 30 sec to
30 min) called from a CGI.

My web page have to wait the end of the system() call before finishing
it's loadding but this is not whats appen. The web page is waiting for
a couple of minutes but continue and finish it's loadding before the
end of program called by the system() call

You don't need to do a wait() after a call to system(). The system()
call does a fork, an exec, and a wait in the parent process to wait for
the child process before returning to your main program. You should
also check the return from system() to see if an error occurred (see
below).
Here a part of my "pseudo" code :

It is better to post real code. Write a short perl program that calls
the same program and see what happens when you execute the perl program
from the command line (you may have to supply some things normally
supplied by your web server). Then post the program and the results if
you still get an error you can't diagnose.
^- other code (html stuff)...

if (!is_lock($file_name, $file_date)){
lock($file_name, $file_date)
system "path_to_long_execution_prog $file_name $file_date";

Replace above line with:

system "path..." == 0 or die "system failed: $?";
my $exit_value = wait();
Delete the above line.
unlock($file_name, $file_date)
} else {
log("Error :: Trying to redo the system call ?!?");
}

and yes, I got "Error :: Trying to redo the system call ?!?" in my log
and is not suppose to... and I don't know why !

I run on a AIX server whith apache 1.3.27 and perl 5.005_02

Dave

FYI: this newsgroup is defunct. Try comp.lang.perl.misc in the future
for better responses.
 

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

No members online now.

Forum statistics

Threads
473,800
Messages
2,569,657
Members
45,416
Latest member
MyraTrotte
Top