作者ICBM ( .)
看板java
标题[J2SE] 如何开启并间控外部process
时间Thu Feb 7 21:15:55 2013
我手上有一支以C++使用mingw编成的command line模拟程式,他吃一个XML的input file。
现在我用java撰写一只前处理程式,作用是会把使用者的input存成xml档案,并且
在使用者按下上面的"开始计算"的按钮之後自动叫出该command line程式并开始计算。
此外,还要能盯住该command line视窗,如果使用者按下"停止计算"的按钮,
则会把相对应的command line视窗杀掉。
我目前试过使用ProcessBuilder或是Runtime.getRuntime的方式来做。
我另外开一个thread,在里面呼叫ProcessBuilder或是Runtime.getRuntime下如下指令:
cmd.exe /c start <模拟程式> <input file路径>
这样会开始算,而且一直算下去。不过,我java里的thread会立刻结束,看起来很像是我
java thread里面的process物件得到了exitValue然後就结束了。但是外面的
command line视窗仍在,而且模拟程式继续计算中。如果把指令改成下面这样:
cmd.exe /c start /wait <模拟程式> <input file路径>
这样会变成我去创造process的thread不会立刻结束而是到我里面用的process.waitFor()
结束时thread才会跟着结束。如此行为原本符合我的预期直到我发现当我去interrupt
这个thread(我有覆写interrupt(),会先call Process.destroy()才做interrupt)时,
这个thread有结束掉但是我叫出来的process则没有,外面的command line是视窗仍存在。
看起来不论我用什麽方法,一但我启动该command line process之後就对他失去
追踪了。请问我要用什麽方法才能在XP上达到我上面所说的目的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.205.186.80
※ 编辑: ICBM 来自: 123.205.186.80 (02/07 22:03)
1F:→ swpoker:taskkill /? 02/08 17:04
2F:→ qrtt1:比较简单的方法是产生一个暂时的.bat放你想做的事。 02/08 22:50