- - PR -
CGIからシェルを非同期で起動する方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-09 15:23
お世話になります。
cgi(perl)からシェルを非同期で起動しておき すぐに別のページにリダイレクトしたいのですが シェルの終了を待っているようで、すぐにリダイレクトできません。 直接、perlコマンドで下記のtest.cgiを起動すると シェルは非同期で起動されるのですが... ご教授お願いできれば幸いです。 test.cgi ------------------------------------------- #!/usr/bin/perl -- # リダイレクト print "Location: test2.cgi\n\n"; # シェルを非同期で起動 exec "/usr/bin/sudo /usr/local/bin/test.sh &" exit(0); ------------------------------------------- Apache 2.0.40 Perl 5.8.0-88 |
|
投稿日時: 2005-08-09 16:02
単にexec()しただけでは、標準出力がApacheに繋がったままになり、
ApacheがCGIスクリプト(とその子プロセス)の出力が終わるのを待っているのではないでしょうか? fork()して子プロセスでSTDOUT、STDERRを閉じてからexec()したら大丈夫だったと思います。 |
|
投稿日時: 2005-08-09 17:57
こんにちは。
cn009 さんのコメントにもありますが、子プロセスが CGIプロセスの STDOUT, STDERR を継承したままだと、CGI自体の出力が完了していないと見なされます。 exec '/usr/bin/sudo /usr/local/bin/test.sh >/dev/null 2>&1 &' 等のように、STDOUT, STDERR を別口へ切り替える手が使えると思います。 ※ STDIN は…、今回関係無いかな?? |
1