检查Java应用程序的多个实例是否正在运行(不阻止它们)

时间:2012-02-26 05:45:56

标签: java

我见过很多关于如何阻止Java应用程序的例子,例如锁定文件或创建套接字。

如何允许多个实例运行,但检查另一个实例是否正在运行?

我需要这样做的原因是我想在退出时清理一个临时文件夹,但是如果有另一个进程正在运行则不行。

2 个答案:

答案 0 :(得分:0)

您可以使用任何您喜欢的IPC。例如,创建/tmp/you_app_name_flag.$$个文件($$表示pid)并验证应用启动时/tmp/you_app_name_flag.*的存在。

答案 1 :(得分:0)

您可以使用attach API并检查正在运行的虚拟机,如此blog entry中所述

  

获取VirtualMachine的另一种方式是询问系统已知的虚拟机列表,然后选择您感兴趣的特定虚拟机,通常按名称:

  String name = ...
  List vms = VirtualMachine.list();
  for (VirtualMachineDescriptor vmd: vms) {
      if (vmd.displayName().equals(name)) {
          VirtualMachine vm = VirtualMachine.attach(vmd.id());
          String agent = ...
          vm.loadAgent(agent);
          // ...
      }
  }