有没有办法通过进程id关闭Java应用程序?

有没有办法通过进程id关闭Java应用程序?,java,pid,Java,Pid,我有一个在linux服务器上运行的Java应用程序。当它启动时,它将进程id记录到一个“pidfile”中 当我关闭它时,我只是从该文件中读取pid,然后将其杀死: kill -9 12345 但是其他人说这不安全,相反,他们建议我嵌入一个小型http服务器,并提供一个用于关闭的http api,例如: http://localhost:8080/close 当我想关闭它时,我需要访问它: curl http://localhost:8080/close 它可以工作,但很无聊,我还是喜欢“

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

当我关闭它时,我只是从该文件中读取pid,然后将其杀死:

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

http://localhost:8080/close
当我想关闭它时,我需要访问它:

curl http://localhost:8080/close
它可以工作,但很无聊,我还是喜欢“进程id”的方式。是否有任何方法可以使用进程id安全地关闭应用程序


更新:


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

您可以通过执行kill-HUP processId将其关闭

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

更多信息请点击这里


附言:在我看来,如果你真的不需要的话,不要仅仅为了这个目的而嵌入web服务器。如果你使用web服务器,你还需要考虑安全性——任何知道url的人都可以远程关闭你的应用:)

取决于你所说的安全?我猜“人们”是说允许Java进程清理和关闭资源,但如果这与您无关,那么就不用麻烦了(尽管
kill-HUP
可能会更好一些…@AndersR.Bystrup谢谢,我刚刚更新了一个相关帖子中讨论的问题:我看到一些文档说,
kill-HUP
意味着重新启动应用程序。但我不想让它“重启”,只要把它关上就行了。我是否误解了什么?应用程序可能会对信号做出任意的反应,但不会立即终止它。HUP代表挂断,即与用户的连接丢失。这通常会导致优雅的退出。这里解释了这些信号:@Freewind,只是对Axel所说的稍加补充——你的应用程序接收到KILL信号,并对其作出反应——在你的情况下,“取消一些正在运行的任务,这些任务可能会将文件写入磁盘,并在退出之前关闭一些资源”,然后终止。