JVM 关闭时 Java 子进程死亡

标签 java bash ubuntu gnu-screen

我有一个名为 update.sh 的 bash 文件,它本质上是

  1. 从github拉取最新代码
  2. 编译新代码
  3. 停止正在运行的 java 服务器
  4. 使用更新后的代码再次启动 java 服务器

我的java代码如下:

Runtime.getRuntime().exec("/root/update.sh");

问题是,当运行 update.sh 的第 3 步时,它会杀死 JVM,而 JVM 又会杀死正在运行 update.sh 的子进程,这意味着它永远不会进入第 4 步。

有没有一种方法可以让 java 生成一个即使在 JVM 关闭后仍然存在的子进程?

我正在使用 EC2 Ubuntu 服务器。

最佳答案

一种可能的方法是将运行 update.sh 的部分与 java 服务器相互分离,并制作一个单独的 unix 进程来更新服务器。您可以使更新过程甚至在可能的重启中存活下来,将其包装在 upstart 中脚本

更新:或 runit , 或 daemontools , 或 systemd等(感谢@charles-duffy)

关于JVM 关闭时 Java 子进程死亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633813/

相关文章:

node.js - 是否有一个永远等同于 yarn 的 Node ?

java - 如何通过日历获得正确的一年中的周数?

java - 将 DefaultCategoryDataset 转换为 CategoryDataset

java - 如何从时间戳(长格式)中检索日月和年

python - 使用 QSUB 和 bash 文件打印 Keras 的训练进度

python - 在缺少的模块上构建 Python 等

java - 如何使用返回所有文档的 spring-data-solr 构建 FacetQuery (* :*) from solr index

linux - 在函数中调用服务两次?

json - 将文件作为字符串传递给 Github Gist REST API

linux - 从终端创建多行文件时如何缩进?