2013-11-15 39 views
2

我有一個運行在Linux服務器上的Java應用程序。當它開始時,它將進程ID記錄到「pidfile」。有什麼辦法通過進程ID關閉Java應用程序?

當我關閉它,我只是從文件中讀取的PID,並殺死它:

kill -9 12345 

但其他人說,它是不是安全,相反,他們建議我到嵌入小型的http服務器,並提供HTTP API用於關閉,如:

http://localhost:8080/close 

當我想關閉它,我需要訪問它:

curl http://localhost:8080/close 

它工作但很無聊,我仍然更喜歡「進程ID」的方式。有什麼方法可以使用進程ID來安全關閉應用程序?


更新:

「安全」在這裏,我的意思是我可以取消它可以將文件寫入到磁盤中的一些正在運行的任務並在退出之前關閉一些資源。

+2

取決於你的安全意味着什麼?我猜「人們」是說爲了讓Java進程清理和關閉資源,但是如果這與你無關,那就不要打擾了(儘管'kill -HUP'可能會更好一些......) –

+0

@ AndersR.Bystrup謝謝,我剛剛更新了我的問題 – Freewind

回答

1

你可以通過執行殺-HUP關閉它的ProcessID

如果有必要優雅完成的工作,註冊關閉鉤子,並執行所有必需的定稿那裏。

更多的信息在這裏Runtime.addShutdownHook

P.S:在我看來,沒有嵌入Web服務器只是爲了這個目的,如果你並不真的需要它。如果你使用網絡服務器,你還需要考慮安全性 - 任何知道這個URL的人都可以遠程關閉你的應用:)

+0

關閉鉤子在相關帖子中討論過:http://stackoverflow.com/questions/191215/how-to-stop-java-process-gracefully –

+0

我看到一些文檔說'kill -HUP'意味着重新啓動一個應用程序。但我不希望它「重新啓動」,關閉它。我誤解任何東西嗎? – Freewind

+1

應用程序可能會對任何不會立即殺死的信號做出任意反應。 HUP代表掛斷,即與用戶的連接丟失。這通常會導致優雅的退出。信號在這裏解釋:http://en.wikipedia.org/wiki/Unix_signal –

相關問題