2013-11-15 23 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 –

相关问题