2009-04-17 74 views
1

我創建了一個Ant任務來編譯VB6應用程序。如果腳本被取消,如何終止從Ant任務啓動的進程?

源文件的一些預處理後,我用

Process p = Runtime.getRuntime().exec(...); 
p.waitFor(); 

開始VB6.exe適當的參數但是,當我按Ctrl + C,而螞蟻正在運行,腳本,我的任務是終止,但衍生的進程仍在運行。

如何在Ant腳本終止時自動終止我開始的過程? 如果我按Ctrl + C究竟發生了什麼?我的任務是否立即死亡或有什麼反應?

回答

1

你可能有興趣在此代碼:

final Process process = new ProcessBuilder("blah blah").start(); 
    Runtime.getRuntime().addShutdownHook(new Thread() { 

     @Override 
     public void run() { 
      process.destroy(); 
     } 

    }); 
    process.waitFor(); 

的javadoc addShutdownHook

Java虛擬機在響應關閉以兩種事件:

  • 程序正常退出時,最後一個非守護進程線程退出或退出調用(相當於System.exit)方法或響應用戶中斷(例如鍵入^ C,
    )或系統範圍事件(如用戶註銷或系統關閉)來終止虛擬機。
1

Runtime.exec()在單獨的OS進程中運行該命令。當你按下Ctrl + C時,你會終止Java進程。

您可以嘗試Runtime.addShutdownHook(Thread hook)。當你按下Ctrl + C鍵時,這個鉤子線程將在JVM關閉時被調用。實現將試圖殺死你開始的進程的鉤子線程。要終止進程,您需要在該操作系統上找到該命令,並在Runtime.exec()中使用該命令。

+0

使用Runtime.exec()與kill或其他操作系統相關的命令是醜陋的; Process#destroy()更好 – dfa 2009-04-17 09:13:52

相關問題