2012-05-21 26 views
1

大家好我在我的java應用程序中有兩個進程如下。如何殺死java中的特定進程

Process p1=some process; 
Process p2=some process; 

在第一時間啓動其工作perfectly.But當我重新加載應用程序的較舊的進程也正在運行,所以我只是想殺死舊過程中,如果其executing.I知道,我們可以殺掉一個進程通過使用它的進程id.But我怎麼能得到這個P1和P2的進程ID。任何想法?

+0

一個瘋狂的猜測,但你不能保存ID在文本文件,數據庫或其他任何onstartup,看看是否有最後一個已知的ID進程是活動的,殺死他們,如果他們是重新啓動/啓動其他進程? –

+2

可能的重複可能http://stackoverflow.com/q/6356340/776084 – RanRag

+3

在我看來,殺死過程會導致各種問題。你不能在重新加載之前終止(以某種受控的方式)嗎? – npinti

回答

0

在您的應用程序中捕獲重裝事件並在退出之前終止子進程。

如果這不起作用,那麼您的設計中可能有一個錯誤。嘗試修復該錯誤。真。我是認真的。

解決方法是將PID寫入文本文件。當你開始時,閱讀文本文件檢查這是否是正確的過程然後殺死它。

沒有檢查,你可能會殺死一個由其他人創建的完全有效的過程。我的推理是這樣的:當你重新加載時你不能殺死進程。這意味着你不能刪除文本文件。所以PID文件將一直存在。最終,你會殺死錯誤的過程。這將每年發生一次。這將在您離開/更換工作/等六個月後第一次發生。沒有人會明白髮生了什麼,因爲幾乎不可能複製。

+0

但我怎樣才能得到這些process.is的進程ID有進程中的任何函數來獲取進程ID。 – elvisanandkumar

+0

如果要關閉關閉進程,請使用'p.destroy()'。要獲得PID,請將子項封裝在將PID寫入文件或查看此答案的shell腳本中:http://stackoverflow.com/questions/1897655/get-subprocess-id-in-java –

0

正如其他人所說,最好是以更自然的方式終止這個過程。但是,如果您確實需要強制終止它,那麼只要您不再在意它的運行,就可以在Process對象上調用destroy()方法。

另外,你真的需要運行代碼作爲一個過程?通常有更好的方法。