Prat824 has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks

I am trying to redirect to an html page while a script runs in the background. the browser waits 2-3 min for exec to finish before it displays redirected page.

print "Location: $outpage_url\n\n"; exec("$bin/somescript.pl");


I have also tried system("$bin/somescript.pl &"); without success.
  • Comment on How to open redirected url while running foolwing code in background
  • Download Code

Replies are listed 'Best First'.
Re: How to open redirected url while running foolwing code in background
by Corion (Patriarch) on Apr 22, 2009 at 10:00 UTC
Re: How to open redirected url while running foolwing code in background
by almut (Canon) on Apr 22, 2009 at 09:54 UTC

    You need to fork a child process to run the background job, so the parent can send the redirection and terminate normally. Also, you'll need to close (or redirect to a file) STDOUT and STDERR in the child before the exec(), so the webserver will not wait for the pipes to the child (duplicated by the fork) to get closed.

    Update: something like this:

    my $pid = fork(); die "Couldn't fork: $!" unless defined $pid; if ($pid) { # parent print "Location: $outpage_url\n\n"; } else { # $pid == 0 # child open STDOUT, ">>", "/path/to/some/logfile" or warn "Couldn't redir +ect STDOUT: $!"; open STDERR, ">>", "/path/to/some/logfile" or warn "Couldn't redir +ect STDERR: $!"; exec "$bin/somescript.pl"; exit; # just in case the exec failed }