我有一个关于在Windows XP下启动和监控外部进程的java问题。
我用C ++和mingw编写了一个coommand-line仿真程序,它将XML文件作为输入文件。我正在为该程序编写预处理器(我称之为#34; Launcher")。
Launcher允许用户编辑参数并保存到XML文件,它还提供了使用输入文件启动模拟过程的能力,并在其仍在运行时终止模拟过程。为此,它必须能够监视启动的命令行模拟过程。
在Launcher中,我创建了一个新线程,并在ProcessBuilder
函数中使用Runtim.getRuntime()
或run()
方法来启动模拟过程。用于构建ProcessBuilder以启动外部模拟程序的命令如下:
cmd.exe /c start <simulation program> -i <input file>
仿真过程确实按照我的预期启动,并显示命令窗口。但是,包含此Process对象的线程立即结束。因此,我无法跟踪该过程并从Launcher程序中终止它。
我将命令修改为以下内容:
cmd.exe /c start /wait <simulation program> -i <input file>
用于启动此过程的线程直到运行模拟过程的命令行窗口结束才结束。 但是,当我试图中断这个线程时,线程确实结束了,但外部模拟过程并没有。因此,我仍然无法从我的java程序中删除该进程。
我已经研究了这个问题两天了,我发现的大多数材料都集中在如何开始外部过程但是在开始之后没有专注于监控它。我希望我能找到一种简单而优雅的方法,在XP下使用Java启动外部命令行进程,同时我仍然可以通过启动它的Java程序监视和终止该命令行进程。