2012-08-04 3 views
2

동일한 외부 프로그램을 실행하기 위해 exec() 함수를 사용하고 있으며, 어떤 경우에는 그 중 하나를 중지하고 싶습니다. 그러나 다음 명령어 :Windows XP에서 exec()가 시작한 프로세스의 PID를 가져올 수 있습니까?

taskkill /IM program.exe 

모두 program.exe이 죽습니다. 그래서 제가 생각하기에 가장 좋은 방법은 프로그램 프로세스를 PID로 죽이는 것입니다.

그래서 나는 프로그램이 실행될 때마다 PID를 얻은 다음 그것을 죽이는 것이 좋다고 생각했습니다.

Windows XP에서 PHP 5.3을 사용하고 있습니다.

+0

'tasklist' 명령을 사용하여 창에서 PID를 찾을 수 있습니다. taskkill과 tasklist가 내 컴퓨터에서 망가 졌기 때문에 데모를 제공 할 수 없으며 해결 방법이 없습니다. – hakre

+0

이 질문은 도움이 될 수 있습니다 : http://stackoverflow.com/questions/9348572/execute-bat-file-without-waiting-for-end/9348938#9348938 –

답변

1

자식 프로세스가 끝날 때까지 exec가 중단됩니다. 당신은 아이의 PID가 필요합니다, 그래서 당신이 아이를 키우고 싶다고 가정합니다.

이 코드를 사용해보세요. 저에게 도움이되었습니다. 그것은 notepad.exe를 nohups 및 $ WshShell-> 간부와 일부 봤 능숙 주장으로 실행되지 $ WshShell->에 자사의 PID

$command = 'notepad.exe'; 
$WshShell = new COM("WScript.Shell"); 
$oExec = $WshShell->exec("notepad.exe"); 
print_r ($oExec->ProcessID) 

에주의를 표시합니다.

다른 사람을 도울 수 있습니다

0

PID는 $output 배열의 첫 번째 요소로 반환되어야합니다.

exec($command, $output); 
$pid = (int)$output[0]; 
+0

나는 코드를 실행하고 PID 결과를 얻습니다. 점심 cmd.exe와 program.exe [내가 사용한 외부 프로그램] .... – qinHaiXiang

+0

@qinHaiXiang 당신이'cmd.exe'를 시작하고'program.exe'를 시작하기 위해 그것을 사용하면 물론 PID를 얻을 것입니다 'cmd.exe'에서 가져 왔는데 꽤 쓸모 없습니다. 왜'program.exe'를 직접 실행하지 않습니까? – Tomalak

+0

background.My 명령의 파일을 복사하는 데 fastcopy [명령 줄 모드]를 사용하고 있습니다. " 'fastcopy.exe .....';", exec() 자동으로 cmd.exe가 시작되고 fastcopy.exe가 실행됩니다. ..... – qinHaiXiang

관련 문제