CGIからバックグラウンドプロセスを起動
#!/usr/bin/perl system("foobar-command &"); print <<_EOF; Content-type: text/plain; end execute _EOF
のようなCGIを起動して、本当にback groundで動くのかと思ってやってみた。
結論を言えば、画面の表示は先に表示されるが、出力をhttpd(Apache2)がちゃんとにぎっているので、プロセスが終了するまではプログレスバーが途中(IEならロゴがなびいている)の状態であった。
httpdがそういう仕様なので仕方がないのだが、もしかしたらと思い、
system("foobar-command >/dev/null 2>&1 &");
と変更したところ、うまく行くようだ。ちなみに、
#!/usr/bin/perl $| = 1; .... if ($pid = fork) { .... close(STDOUT); close(STDERR); wait; } elsif (defined($pid)) { # a child process .... }
のように、forkさせてやってみたのだがうまくいかなかった。
#こちらはコーディングがまずいのかもしれない。