2016-11-21 12 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

괜찮습니다. 고마워요. –