2016-11-21 5 views
4

Я начал процесс в фоновом режиме на сервере Apache Windows.Выполнение и получение pid фонового процесса в PHP на Windows

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")); 
?> 

В то время, я хочу, чтобы получить идентификатор процесса, который php -f test.php. Когда я начинаю index.php, я вижу новый процесс php.exe на выходе командной строки tasklist. Как я могу получить pid для этого фонового процесса.

Спасибо.

+0

'$ PID = getmypid();' http://php.net/manual/en/function.getmypid.php Heed предупреждение, хотя: ** Внимание Идентификаторы процессов не уникальны, поэтому они являются слабым источником энтропии. Мы рекомендуем не полагаться на pids в зависимых от безопасности контекстах. ** – icecub

+0

Спасибо за вашу помощь. но он возвращает pid httpd.exe. Я хочу получить pid php.exe. –

+0

Я не знаю, что именно вы делаете, но имейте в виду, что это команда CLI. Значение этого не будет работать, если вы запустите его в браузере. – icecub

ответ

2

Это приведет к выводу ProcessID после выполнения задачи с использованием wmic. Затем вы можете сохранить это в сеансе или в файле cookie для перехода между страницами.

$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

Он отлично работает, спасибо. –