Seriously, you know what, the code below doesn't even work.

And if I get rid of the redirect and replace it with some nice pretty text:

print "Content-type: text/html\n\nTesting";

You know what? The warning for 1 (from the 'for' loop) is printed and then it all stops, probably as the browser connection "closes".

Hiding it behind more forks made it work once but then never again.

So it is my belief that Apache2::SubProcess sucks dirty things, and that belief won't change until I see proof to the contrary.

On a related note, anyone have tips for avoiding zombies in CGI forking?

Tosh



Tosh Cooey wrote:
Hi after much trial and all error I am seeing that the browser connection closing is also stopping my subprocess.

The main ModPerl::Registry program looks like this:
### file.pl ###
use Apache2::SubProcess ();
use JSON();

&main(shift);

sub main {
  my $r = shift;
  ...
  $r->spawn_proc_prog ('/web/html/file_fork.pl', \...@argv);
  return print $cgi->redirect('index.pl');
}
###

And

### file_fork.pl ###
use JSON();
use warnings;
use POSIX 'setsid';
chdir '/'                or die "Can't chdir to /: $!";
open STDIN, '/dev/null'  or die "Can't read /dev/null: $!";
open STDOUT, '+>>', '/tmp/debug.txt' or die "Can't write to /tmp/debug.txt: $!";
open STDERR, '>&STDOUT'  or die "Can't dup stdout: $!";
setsid or die "Can't start a new session: $!";

  # run your code here or call exec to another program
foreach my $num (1..10) {
  warn $num;
  sleep(1);
}
###

When file.pl is executed it calls file_fork.pl and file_fork starts to print 1, 2, 3 and then stops around 2 or 3 depending on how long my browser is connected.

Are there any glaring errors that anyone sees? It should work shouldn't it, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 after 10 seconds...

Thank-you all!

Tosh



--
McIntosh Cooey - Twelve Hundred Group LLC - http://www.1200group.com/

Reply via email to