有没有办法按进程ID关闭Java应用程序?

时间:2013-11-15 09:26:03

标签: java pid

我有一个在linux服务器上运行的Java应用程序。当它开始时,它将进程id记录到“pidfile”。

当我关闭它时,我只是从该文件中读取pid并将其删除:

kill -9 12345

但是其他人说它不安全,相反,他们建议我嵌入一个小的http服务器,并提供一个http api用于关闭,例如:

http://localhost:8080/close

当我想关闭它时,我需要访问它:

curl http://localhost:8080/close

它有效但非常无聊,我仍然喜欢“进程ID”方式。有没有办法使用进程ID安全地关闭应用程序?


更新

“安全”在这里我的意思是我可以取消一些正在运行的任务,这些任务可能会在退出之前将文件写入磁盘并关闭一些资源。

1 个答案:

答案 0 :(得分:1)

您可以通过执行kill -HUP processId

来关闭它

如果需要优雅地完成工作,请注册关闭挂钩并在那里执行所有必需的最终确定。

此处有更多信息Runtime.addShutdownHook

P.S:在我看来,如果你真的不需要它,不要仅仅为了这个目的而嵌入web服务器。如果你使用网络服务器,你还需要考虑安全性 - 任何知道网址的人都可以远程关闭你的应用程序:)