[J2SE] 如何開啟並間控外部process
我手上有一支以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)
→
02/08 17:04, , 1F
02/08 17:04, 1F
→
02/08 22:50, , 2F
02/08 22:50, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):