2

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

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

kill -9 12345

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

http://localhost:8080/close

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

curl http://localhost:8080/close

它有效但很无聊,我仍然更喜欢“进程ID”的方式。有什么方法可以使用进程 ID 安全地关闭应用程序?


更新:

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

4

1 回答 1

1

你可以通过执行 kill -HUP processId 来关闭它

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

更多信息在这里Runtime.addShutdownHook

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

于 2013-11-15T09:40:13.707 回答