java - 如何让进程监视您的程序以在程序退出时重新启动它

标签 java watchdog

所以我有我的程序,但我不希望它能够被关闭。我知道不可能使其 100% 不可关闭,但这种方法似乎效果最好。

我知道您可以addShutdownHook,但如果使用任务管理器 (Windows) 或 kill -9 从操作系统中终止进程,则此操作将不起作用。 (Unix)。显然,如果我正在运行第二个进程并且主进程被终止,它可以再次重新运行主进程,这使得它更加可靠。

所以,我想知道如何创建 watchdog process在 Java 中,它监视我的实际 Java 应用程序以检测它是否已关闭,如果已关闭,则重新执行该程序。

最佳答案

  1. 您的应用程序可以定期更新文件。看门狗可以检查该文件最近是否已更新;如果没有,看门狗就会认为应用程序已经退出,并重新启动它。应用程序可以在单独的daemon thread中进行更新。 ,以确保无论应用程序负载如何都会进行更新。这可以使用标准 Java 来完成,因此非常便携。

  2. 应用程序的另一个选项是 find its own process ID (PID) ,当它开始运行时,并将其写入文件中。看门狗程序读取该文件以查找应用程序的 PID。然后它可以定期检查 list of running processes检查应用程序是否仍在其中。这更复杂并且使用一些不可移植的代码。但它可以更好地与作为 Unix 计算机上的守护进程启动和停止应用程序的传统方式集成,因为此类守护进程通常会将其 PID 写入文件中。

  3. 您已指定看门狗程序必须采用 Java 语言。如果您在 Unix 上运行它并且愿意将其编写为 shell 脚本,it can be written very easilly ,以及避免使用PID文件和扫描进程列表问题的方式。

关于java - 如何让进程监视您的程序以在程序退出时重新启动它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25765028/

相关文章:

java - Java中扩展类的构造函数

java - 使用 Controller 在 jsp 上显示错误消息

python - 使用 WatchDog 忽略文件

python - 看门狗项目 : Reference before assignment error

java - 只要 protected ,私有(private)最终 String[] 数组就线程安全吗?

java - 无法授予权限...Openoffice 错误

java - 在存储在 org.w3c.dom.Document 中的给定 XML 文件的根元素周围添加一个元素

python-3.x - 如果文件夹被修改,如何使用看门狗并在主线程中执行某些操作?

linux - 如何测试网络内核模块的 tx_timeout 操作?

iPhone,如何避免看门狗因启动时间过长而杀死我的应用程序?