在纯java中实现跨平台判断该进程是否已经启动

来源:互联网 发布:广东国税申报软件 编辑:程序博客网 时间:2024/05/22 03:02

之前写了一个小java程序,有个需求是不允许该程序同时运行多个。当启动程序后,会判断是否已有进程在运行,如果正在运行,则显示“该程序已经运行”的提示信息,并退出,如果没有则启动这个程序。

 

网上查了很多,发现很多方法,如通过jni判断进程号,或通过runtime.exec方法调用tasklist命令判断当前进程,但这些都不能很好的满足程序的跨平台型,当然可以做个判断,如是win则用tasklist,linux用ps。但效果不佳。不过也给我提供了一些灵感。这里我稍微改进一下,有个折中的方法,使用jps来获得java进程,jps是sun的jdk自带的一个jvm运行进程查看工具,无论win还是lin都有,至少能够支持跨平台,代码如下。

 

 private static boolean checkPidInProcess(String pid) throws Exception {
  InputStream in = Runtime.getRuntime().exec("jps").getInputStream();
  BufferedReader b = new BufferedReader(new InputStreamReader(in));
  String line = null;
  while((line = b.readLine())!=null){
   if(line.startsWith(pid)){//我这里是通过pid来识别(pid可以通过MBean获取),其实完全可以改成通过类名来识别
    if(line.indexOf(EICMain.class.getSimpleName()) >=0){
     return true;
    }
   }
  }
  return false;
 }

 

有更好的办法,欢迎讨论

原创粉丝点击