在Java中殺死進程的最佳方式是什麼?在Java中殺死進程的正確方法
獲取PID,然後用Runtime.exec()
將其殺死?
使用destroyForcibly()
?
這兩種方法有什麼區別,還有其他解決方法嗎?
在Java中殺死進程的最佳方式是什麼?在Java中殺死進程的正確方法
獲取PID,然後用Runtime.exec()
將其殺死?
使用destroyForcibly()
?
這兩種方法有什麼區別,還有其他解決方法嗎?
如果要終止的進程已經被你的應用程序
開始,那麼你可能需要它(ProcessBuilder.start()
或Runtime.exec()
都返回的引用)的引用。在這種情況下,您可以簡單地致電p.destroy()
。我認爲這是最乾淨的方式(但要小心:由p
開始的子流程可以保持活着,請查詢http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4770092瞭解更多信息)。
僅當destroy()
在特定超時後失敗時才應使用destroyForcibly
。簡而言之
destroy()
destroyForcibly()
殺死它,如果過程是 還活着如果進程你想殺的就是外部
然後你沒有太多的選擇:你需要通過OS API(Runtime.exec
)。在Windows上,要調用的程序將是taskkill.exe
,而在Mac和Linux上,您可以嘗試kill
。
看一看https://github.com/zeroturnaround/zt-exec/issues/19和Killing a process using Java和http://invisiblecomputer.wonderhowto.com/how-to/code-simple-java-app-kill-any-process-after-specified-time-0133513/獲取更多信息。
謝謝你的解釋!這絕對是我正在尋找的 – Kariamoss
如果你想殺死你的java代碼的主流程,我建議使用System.exit()
。好處在這裏解釋:when should we call system exit in java。
實質上,System.exit()
將運行關閉掛鉤,以確保在進程終止之前可能沒有完成其工作的所有依賴的非守護進程都被終止。這是乾淨的方式。
如果這個過程是不是你的,你將不得不依賴於操作系統,這樣做對你的工作在這個答案解釋:Killing a Process Using Java
在這種情況下,您的建議Runtime.exec()
在* nix擊殺會是一個體面的路要走。
現在爲destroyForcibly()
,你通常會調用由Java代碼催生了一個子進程大概是開始與進程API的ProcessBuilder.start()
或Runtime.exec()
這是你自己的進程或其他進程? –
它是一個java進程或任何進程? – Derlin
這是一個外部非Java過程,但感謝Shitsu – Kariamoss