我有一个java应用程序,我想检查一下应用程序是否正在运行。如果它没有运行,我想启动它。如果它正在运行,我想杀死它然后重新启动它。
有人能告诉我怎么做吗?我可以使用ProcessBuilder轻松地启动/停止程序。但我无法检测到已经运行的进程。
感谢您的帮助! 约翰
答案 0 :(得分:1)
如果没有应用程序的合作(理想情况下是在网络端口上监听),这可能是不可能的(您的Java应用程序可能无法杀死应用程序)并且需要特定于操作系统的代码。在Linux上,您可以使用ps
和kill
命令。
答案 1 :(得分:0)
可能听起来很傻,但您可以在应用程序启动时创建一个具有已知名称的文件。不需要包含任何东西。要检查您的应用程序是否正在运行,请检查该文件是否存在。
答案 2 :(得分:0)
您负责的是其他应用程序(您正在监控的过程)吗?如果是这样,您可以使用我在几年前在某些高可用性系统中使用的方法: 打开与该其他应用程序的连接并“ping”它。如果另一个应用程序在给定的超时内没有响应,则它会关闭或“挂起”,这样做很糟糕(而且您无法通过进程监视检测到这些内容)。 可以使用套接字或更复杂的协议(SOAP?)来打开连接。 另一种方法是让应用程序每隔一段时间发送一次“我活着”的消息。如果您有一段时间没有收到它 - 您的应用程序需要重新启动。 为了实际“杀死”其他进程,您可以保留从exec()方法获得的Process实例,并在您选择时销毁()它。
答案 3 :(得分:0)
感谢您的回复。这就是我害怕的事情。我们试图不向我想要启动的应用程序添加更多内容。我们基本上是尝试将远程控制Web界面添加到应用程序集合中。
我正在编写的Web服务器应用程序基本上会启动/停止3个应用程序,这些应用程序都相互通信以实现目标。如果我的Web服务器启动并停止它们,一切都很好。但是,如果由于某种原因,当我试图启动它们时它们已经在运行,那么坏事就会发生。
我知道我可以用Visual Studio(C ++ / C#/等)处理。但是由于平台独立性的要求,这个项目必须用java编写。
感谢大家的帮助!