[PHP-users 9016] Re: Windows版exec 関数について

NAKAMURA Takeshi php-users@php.gr.jp
Mon, 29 Jul 2002 17:47:53 +0900


仲村です

From: kobayashi@kmc.dip.jp
Date: Mon, 29 Jul 2002 16:03:20 +0900
Subject: [PHP-users 9008] Windows版exec 関数について

> 1.exec("sendmail.exe -tjp < textout.txt");
> 2.exec("sendmail.exe -tjp < textout.txt > c:\temp &");
> 3.exec("e:/www/test/sendmail.exe -tjp < e:/www/test/textout.txt");
> 4.exec("e:/www/test/sendmail.exe -tjp < e:/www/test/textout.txt > c:\temp &");
> 5.exec("e:\\www\\test\\sendmail.exe -tjp < e:\\www\\test\\textout.txt > c:\\temp &");

sendmail の実行時間が長い場合 exec のマニュアル、
> この関数を使用してプログラム実行を開始し、バックグラウンドで
> 実行したままにしたい場合には、プログラムの出力をファイルまたは
> 他の出力ストリームにリダイレクトする必要があることにも注意して
> 下さい。さもないと、PHPはそのプログラムの実行が終了するまでハングします。 
 より、選択肢1,3 は ハングするのが当然でしょう。
また、Windows のSHELL(command.com,CMD.exe) は & でバックグラウンドで
実行させることができません。
(無視してフォアグラウンドで実行され 選択肢1,3 と同じ結果になるようです)
 よって、選択肢2,4,5 もだめです。

多分、以前書いた
 1. Djgpp などの sh(bash?) を取ってきて使う。
 2. C で fork し、親プロセスはすぐに終了するような Wrapper を作る。
辺りが、私の思いつく解決策です。