2

我有一个 java 应用程序,我想在其中检查应用程序是否正在运行。如果它没有运行,我想启动它。如果它正在运行,我想杀死它然后重新启动它。

有人可以告诉我该怎么做吗?我可以使用 ProcessBuilder 轻松启动/停止程序。但我无法检测到已经在运行的进程。

谢谢你的帮助!约翰

4

4 回答 4

1

如果没有应用程序的合作(理想情况下让它监听网络端口),这可能是不可能的(您的 Java 应用程序可能无权终止应用程序)并且需要特定于操作系统的代码。在 Linux 上,您将使用psandkill命令。

于 2009-06-18T15:54:51.257 回答
0

听起来可能很傻,但是您可以在应用程序启动时创建一个具有已知名称的文件。不需要包含任何东西。要检查您的应用程序是否正在运行,请检查该文件是否存在。

于 2009-06-18T15:51:23.703 回答
0

其他应用程序(您正在监控的过程)是否由您负责?如果是这样,您可以使用几年前我在某些高可用性系统中使用的方法:打开与其他应用程序的连接并“ping”它。如果另一个应用程序在给定的超时时间内没有响应,则它要么关闭要么“挂起”,这同样糟糕(并且您无法通过进程监控检测到。打开连接可以使用套接字完成,或者更复杂协议(SOAP?)。另一种方法是让应用程序每隔一段时间发送一条“我还活着”消息。如果您有一段时间没有收到它 - 您的应用程序需要重新启动。为了真正“杀死”其他进程,您可以保留从 exec() 方法获得的 Process 实例,并在您选择时销毁它。

于 2009-06-18T16:56:28.347 回答
0

感谢您的回复。这就是我害怕的。我们正在尝试不向我要启动的应用程序添加更多内容。我们基本上是在尝试将远程控制 Web 界面添加到应用程序集合中。

我正在编写的 Web 服务器应用程序基本上会启动/停止 3 个应用程序,它们都相互通信以实现目标。如果我的网络服务器启动和停止它们,一切都很好。但是,如果由于某种原因,当我尝试启动它们时它们已经在运行,就会发生不好的事情。

这是我知道我可以用 Visual Studio (C++/C#/etc) 处理的东西。但是由于平台独立性的要求,这个项目必须用 java 编写。

谢谢大家的帮助!

于 2009-06-18T17:09:18.737 回答