我有一个在linux服务器上运行的Java应用程序。当它开始时,它将进程id记录到“pidfile”。
当我关闭它时,我只是从该文件中读取pid并将其删除:
kill -9 12345
但是其他人说它不安全,相反,他们建议我嵌入一个小的http服务器,并提供一个http api用于关闭,例如:
http://localhost:8080/close
当我想关闭它时,我需要访问它:
curl http://localhost:8080/close
它有效但非常无聊,我仍然喜欢“进程ID”方式。有没有办法使用进程ID安全地关闭应用程序?
更新
“安全”在这里我的意思是我可以取消一些正在运行的任务,这些任务可能会在退出之前将文件写入磁盘并关闭一些资源。
答案 0 :(得分:1)
您可以通过执行kill -HUP processId
来关闭它如果需要优雅地完成工作,请注册关闭挂钩并在那里执行所有必需的最终确定。
此处有更多信息Runtime.addShutdownHook
P.S:在我看来,如果你真的不需要它,不要仅仅为了这个目的而嵌入web服务器。如果你使用网络服务器,你还需要考虑安全性 - 任何知道网址的人都可以远程关闭你的应用程序:)