2016-11-21 6 views
4

Windowsのapacheサーバーでバックグラウンドでプロセスを開始しました。この次WindowsでPHPでバックグラウンドプロセスを実行して取得する

のindex.php:この次

<?php 
$cmd = "C:/xampp/php/php.exe -f test.php"; 
pclose(popen("start /B ". $cmd, "r")); 
echo "OK"; 
?> 

test.phpを:

<?php 
sleep(5); 
file_put_contents("1.txt", date("Y-m-d H:i:s")); 
?> 

そのときは、私は、PID php -f test.phpを取得したいです。 index.phpを起動すると、新しいphp.exeプロセスがtasklistコマンドラインの出力に表示されます。 このバックグラウンドプロセスでpidを取得するにはどうすればよいですか。

ありがとうございました。

+0

'$ PID = getmypid();' http://php.net/manual/en/function.getmypid.php留意してくださいしかし警告:**警告プロセスIDはユニークではないため、弱いエントロピー源です。セキュリティに依存する状況では、pidに頼らないことをおすすめします。** – icecub

+0

ありがとうございました。それはhttpd.exeのPIDを返します。私はphp.exeのPIDを取得したい。 –

+0

正確に何をしているのかわかりませんが、これはCLIコマンドであることに注意してください。これは、ブラウザで実行すると機能しません。 – icecub

答えて

2

これは、wmicを使用してタスクが実行された後にProcessIDを出力します。これをセッションまたはクッキーに保存して、ページ間を渡すことができます。

$cmd = 'wmic process call create "C:/xampp/php/php.exe -f /path/to/htdocs/test.php" | find "ProcessId"'; 

$handle = popen("start /B ". $cmd, "r"); 

$read = fread($handle, 200); //Read the output 

echo $read; //Store the info 

pclose($handle); //Close 

出力

ProcessId = 1000 
+1

それはうまく動作します、ありがとう。 –

関連する問題