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させてやってみたのだがうまくいかなかった。
#こちらはコーディングがまずいのかもしれない。