我正在使用exec()
函数执行相同的外部程序,我想在某些情况下停止其中的一个。但是下面的命令:是否有可能在Windows XP中获取由exec()启动的进程的PID?
taskkill /IM program.exe
会得到全部program.exe
死亡。所以我认为最好的方式是通过其PID来杀死程序进程。
所以,我认为每次程序执行时都要获取PID,然后杀死它。
我在Windows XP上使用PHP 5.3。
我正在使用exec()
函数执行相同的外部程序,我想在某些情况下停止其中的一个。但是下面的命令:是否有可能在Windows XP中获取由exec()启动的进程的PID?
taskkill /IM program.exe
会得到全部program.exe
死亡。所以我认为最好的方式是通过其PID来杀死程序进程。
所以,我认为每次程序执行时都要获取PID,然后杀死它。
我在Windows XP上使用PHP 5.3。
Windows上的exec挂起,直到子进程结束。你需要一个孩子的PID,所以我想你想要一个孩子。
试试这个代码,它为我工作。它nohups的notepad.exe,并显示其PID
$command = 'notepad.exe';
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->exec("notepad.exe");
print_r ($oExec->ProcessID)
留意$ WshShell-> EXEC而不是$ WshShell->运行一些一派ressources要求。
可以帮助其他人
PID应作为$output
数组的第一个元素返回。
exec($command, $output);
$pid = (int)$output[0];
我运行你的代码并得到任何PID结果,它只是午餐cmd.exe和program.exe [我使用的外部程序] .... – qinHaiXiang 2012-08-04 10:09:25
@qinHaiXiang如果启动'cmd.exe'并使用它启动'program.exe',那么当然你会得到PID从'cmd.exe',这是相当无用的。你为什么不直接启动'program.exe'? – Tomalak 2012-08-04 10:19:19
我正在使用fastcopy [命令行模式]在background.My命令中复制文件:“'fastcopy.exe .....';”,exec()自动启动cmd.exe,然后fastcopy.exe ..... – qinHaiXiang 2012-08-04 11:49:09
您可以使用'tasklist'命令在窗口下找到关于PID的信息。我无法提供演示,因为taskkill和tasklist在我的计算机上被破坏,我不知道如何解决它们。 – hakre 2012-08-04 09:53:33
这个问题可能会有所帮助:http://stackoverflow.com/questions/9348572/execute-bat-file-without-waiting-for-end/9348938#9348938 – 2012-08-04 09:55:22