
tosh at 1200group
Feb 20, 2010, 7:01 AM
Post #3 of 11
(1076 views)
Permalink
|
Maybe it does or doesn't work under MP::R, the answer to that is perhaps individual. Anyway, the solution, at least so far until I run into other problems, seems to be to just make a system() call and the called program uses Proc::Daemon and things *seem* to work fine in testing, we'll see when it hits production... Tosh Fred Moyer wrote: > I haven't been following this thread too closely, but is there a > reason you aren't using PerlHandlers instead of ModPerl::Registry? > MP::R is meant mostly for CGI migration, so it is probably not widely > tested with Apache2::SubProcess calls. I'd suggest trying your > external call under a PerlHandler instead and see if that works. > > On Fri, Feb 19, 2010 at 1:52 PM, Tosh Cooey <tosh [at] 1200group> wrote: >> 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/ >> > -- McIntosh Cooey - Twelve Hundred Group LLC - http://www.1200group.com/
|