2009-07-15 8 views
2

私は他のスクリプトのキューを構築し、その起動を管理するはずのスクリプトを作成しています。マネージャースクリプトはどの子プロセスが終了したのかを知る必要があるため、キュー内で待機している他のスクリプトを起動できます。特定のプロセスを見つける方法はまだPHPで実行中です

「& echo $!」を追加しました。各子プロセスのプロセスIDを取得します。私は自分の子プロセスのプロセスIDを持っていますが、今は子プロセスがまだ実行されているかどうかを見つけるためにシステム "ps"プログラム呼び出しを使用しています。

私のスクリプトは現在UNIX系のシステムでしか動作していません。私は子供のPIDをウィンドウに取り込む方法を知らないし、私のスクリプトはWindowsの "tasklist"コマンドの出力をまだ解析していない。

これを達成する他の方法はありますか?子プロセスがまだ実行中であるかどうかを調べるためのPHP内のすべてのソリューション?他のプロセス(非ブロッキング)を開始し、まだ実行中であるかどうかを確認するソリューション。

+0

Process Control APIを使用していますか? [http://us3.php.net/manual/en/book.pcntl.php] –

+0

私はPCNTLを使うと思ったので、パイプを使って子プロセスの出力を読み込み、どちらが終了したのかを知ることができました。 PCNTL(他のプロセス制御拡張機能のようなもの)はすべて現在Unixのみです。だから私はバックグラウンド(UNIXのようなシステムのような子スクリプト名の最後に "&"を追加するような)に子プロセスを送るコマンドでexec()を使用しています。しかし、私は別の方法で、再びこれらのウィンドウで対処しなければなりません。 – farzad

答えて

0

UNIX環境ではProcess Controlが面白いかもしれません。また、Windows上でプログラムを実行する例がcomment in the manualである場合があります。これはCOMオブジェクトのことを指摘しています。

0

あなたができることは、プロセスIDを保持するデータベースまたはファイルを作成することです。すべてのプロセスは、自分のPID(プロセスID)をファイルまたはDBに書き込みます。 は、PHPのpidを取得するために、このメソッドを使用します。プロセスIDはまだで実行されている場合

getmypid(); 

あなたの監督プロセスは、すべての今してチェックしますが、以下:

function is_process_running($PID) { 
    exec("ps $PID", $ProcessState); 
    return(count($ProcessState) >= 2); 
} 

プロセスが停止しているときのことができます。次のプロセスに

を実行し、Windowsを使用するためのマニュアルのコメントをご確認ください:http://no2.php.net/manual/en/book.exec.php#87943

0

あなたが試してみましたproc_get_status()?その場合、proc_open()を使用して子プロセスを生成することができます。これがあなたの探しているものなのかどうかわかりません。

関連する問題