我剛剛意識到,我開始的所有進程在JVM退出時並不會死亡。有沒有辦法讓我用JVM退出關閉Process
,有點像File.deleteOnExit()
?我可以讓JVM在退出時終止啓動的進程嗎?
回答
在退出之前,您應該在每個Process
上調用.waitFor()
方法。
如果你無法控制這一過程,以及你願意,你可以使用Runtime.addShutdownHook()
:
final Process process = startNewProcess();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
process.waitFor();
}
}));
我真的不推薦後者解決方案,如果可能的話,雖然。如果JVM沒有機會清理自己,那麼如果被強行殺死的話,這個過程仍然會運行。
所以'waitFor()'會殺死JVM退出進程?我已經運行'waitFor()',但可能由於IO而未被調用。我會調查。 – 2012-02-01 17:42:49
'waitFor()'會阻塞正在運行的線程,直到進程結束。我說你應該把它放在正常流程的末尾。否則,你可以使用我的替代方案。 – 2012-02-01 17:46:40
是否可以向該進程發送信號,如Ctrl + C? – 2012-02-01 19:53:28
您可以保留所有正在運行的進程的列表,然後使用Process.destroy()將其關閉,如提到的Platinum Azure之類的關閉鉤子。
當進程完成時,您還需要清理清單。如果你有已經調用process.waitFor()的代碼,那麼可以清理列表。
銷燬方法強行關閉進程,可能會破壞正在執行的任何操作,因此您應該注意使用它。
如果你控制其他進程,然後發信號通知它關閉,然後等待它完成將是明智的通過銷燬。
- 1. 可以退出()無法終止進程?
- 2. 當退出時終止在xterm內啓動的所有進程
- 3. 在Linux中啓動Eclipse時出錯:「JVM終止。退出代碼= 13」
- 4. 意外的JVM終止。退出代碼= 13啓動STS 3.9時出錯?
- 5. Eclipse IDE無法使用JVM終止啓動。退出代碼= -1
- 6. Eclipse不會啓動(Ubuntu):JVM終止。退出代碼= 2
- 7. 無法啓動Eclipse。 JVM終止。退出代碼= 13。 (RHEL)
- 8. Eclipse不啓動(JVM終止退出代碼= 1)
- 9. JVM在訪問JFrame時以退出代碼1終止
- 10. Eclipse的錯誤退出「JVM終止......」
- 11. Eclipse Birt JVM終止退出代碼= -1
- 12. 強制終止進程時的進程退出代碼
- 13. 如何退出/暫停/終止/終止/停止MSBuild進程?
- 14. Python終止進程退出代碼-1073741819
- 15. phantomjs退出()不終止進程
- 16. 催化劑在啓動 - 停止 - 守護進程啓動時退出
- 17. 終止後iPhone應用程序可以重新啓動嗎?
- 18. @計劃任務讓獨立程序想要退出時JVM掛起,需要終止JVM
- 19. 在Perl中啓動的退出進程
- 20. 啓動時,我可以讓NFS共享我的根目錄嗎?
- 21. 守護進程線程終止於jvm
- 22. 當在J2SE 6.0的Mac OS上啓動Eclipse MAT時,JVM終止
- 23. IIS或ASP.NET工作程序可能重新啓動以終止由網站啓動的子進程嗎?
- 24. 當我啓動另一個進程時,程序突然退出
- 25. 如何讓我的程序在進入退出後退出
- 26. 我可以在不同的進程中連接到JVM嗎?
- 27. 紅寶石 - 當主線程退出時不要終止進程
- 28. 退出時終止應用程序
- 29. 我可以等待當前shell終端的子進程終止嗎?
- 30. Python:我可以指定從python啓動進程時啓動幾何嗎?
在大多數情況下,退出JVM並終止進程是彼此同義的。你能提供一些關於你的病例究竟發生了什麼的細節(或者至少是什麼症狀)? – NPE 2012-02-01 17:14:18
'Runtime.addShutdownHook'並做任何你有的 – bestsss 2012-02-01 18:12:23