0

我正在开发一个基于 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,但都不是真正的PID。

4

1 回答 1

1

在 Windows 上,您调用以启动 Matlab 的 Matlab 程序(由“开始”菜单中的快捷方式指向的程序以及添加它的路径上的程序)只是一个启动程序,它继续运行另一个matlab.exe是实际程序的启动程序,然后立即返回。您返回的 PID 是启动程序的 PID,当真正的 Matlab 工作时,它就会消失。

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

于 2013-01-17T02:46:56.410 回答