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

之前写了一个小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;
 }

 

有更好的办法,欢迎讨论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值