如何在Windows上从PHP获取进程PID

时间:2013-01-16 16:09:19

标签: php windows matlab exec pid

我正在开发一个基于Web的应用程序,我需要运行一个Matlab脚本来处理一些信息。

问题在于我对同时运行的最大Matlab进程数量有限制,因此,我必须得到每个进程的PID,以便知道它们中的任何进程是否崩溃以及哪一个进程崩溃它是。

我已经使用了一些方法来获取它的PID,但由于某种原因,运行像'notepad.exe'之类的简单命令可以正常工作并获得正确的PID,但是当我运行我的脚本时它会得到错误的PID。

我试过的方法之一就是这个:

$process = "matlab";
$command = "-sd ".$softExecPath." -r \"analyse('".$videoDataPath."', '".$id_video_data."') \" ";
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->exec($process." ".$command);
$pid = intval($oExec->ProcessID);

另一个是:

$process = "matlab";
$command = "-sd ".$softExecPath." -r \"analyse('".$videoDataPath."', '".$id_video_data."') \" ";
$command = $process." ".$command;
// use psexec to start in background, pipe stderr to stdout to capture pid
exec("C:/AppServ/www/PsTools/psexec.exe -d -accepteula $command 2>&1", $output);
// capture pid on the 6th line
preg_match('/ID (\d+)/', $output[5], $matches);
$pid = $matches[1];

他们都获得了PID,但没有一个是真实的。

1 个答案:

答案 0 :(得分:1)

在Windows上,您调用的Matlab程序启动Matlab(开始菜单中的快捷方式指向的程序,如果添加了它,则在路径上)只是一个启动程序,继续运行另一个{{1这是实际的程序,然后立即返回。您要获取的PID是启动程序的PID,当真正的Matlab正在工作时它将会消失。

您可以做两件事:您可以直接在bin / win32或Matlab安装下的类似平台特定目录中查找实际的matlab.exe程序。然后你会得到正确的PID。或者您可以使用matlab.exe选项来使启动程序同步运行,这意味着它会阻止直到子-wait退出,因此它仍将显示在进程列表中,而Matlab是运行