CGI-Perlのforkで子供を置き去りにするには?
[上に]
[前に]
[次に]
ちゃいパパ
[E-Mail]
[HomePage]
1999/10/12(火) 16:01:26
CGI-Perlのforkで、重い処理を子供にやらせ、
親は軽い処理をしてすぐブラウザに戻りたいのですが、
子供が終わるまで戻ることができません。
子供を置き去りにして戻る方法を教えて下さい!!
ぎん
[E-Mail]
1999/10/12(火) 18:32:22
私は、あまり詳しくはないのですが、
forkを使わなければ、ならないのでしょうか?
もし、UNIX系のサーバーなら、
その重い処理を、別のperlなどにして於いて、
system("perl.pl [パラメータ] & ");
の様にして、&マークを着ける事により、別タスクとして
呼び出せます。
参考にならなかったかもしれませんね。
B-Cus
1999/10/13(水) 00:07:21
うちの apache-1.3.0 では system("command &") でも
if ( fork ){ # おや
} else { # こ
sleep(100);
}
でも待たされました。STDOUT がオープンされっぱなしだから(かな?)。なので、
$|=1;
print "Content-type: text/html\n\nOK.\n";
if ( fork ){ # おや
close(STDOUT);
} else { # こ
close(STDOUT);
sleep(100);
}
とか。
まぁ、それなら fork せずに
close(STDOUT);
sleep(100);
でもいいんだけど、ダメな環境もある模様。
../199909/99090185.htm
ところで、今回のように fork して close(STDOUT) しても待たされますか?>ふじさん
# Win の perl って fork できないんでしたっけ?
ただし、あまりにも長い処理をしていると、子プロセスにシグナル
飛んでくるかもしんない。その場合は適当にシグナルをブロックして下さい。
ふじ
1999/10/13(水) 02:04:10
># Win の perl って fork できないんでしたっけ?
出来ません。
% perl -e "fork"
The Unsupported function fork function is unimplemented at -e line 1.
>まぁ、それなら fork せずに
> close(STDOUT);
> sleep(100);
>でもいいんだけど、ダメな環境もある模様。
具体的には、Windowsの Apache1.3.6 では駄目でした。
手元の Linux + Apache1.3.3 だと B-Cus さんの実験と
同じ結果です。
ちゃいパパ
1999/10/13(水) 09:59:08
[[解決]]
B-Cusさん close(STDOUT); でうまくいきました!!
ありがとうございました!!
ぎんさん ありがとうございました!!
ふじさん 前回に引き続いて、ありがとうございました!!
[上に]
[前に]
[次に]