在纯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;
}
有更好的办法,欢迎讨论
- 在纯java中实现跨平台判断该进程是否已经启动
- shell中判断此进程是否已经启动
- VC 判断指定进程是否已经启动
- 判断某个进程是否已经启动
- .net中判断该应用程序是否已经启动,防止重复启动
- .net中判断该应用程序是否已经启动,防止重复启动
- android中判断service是否已经启动
- Linux判断进程是否存在并启动该进程
- Linux判断进程是否存在并启动该进程
- 判断服务是否已经启动
- 怎么判断SQLServer中SQLServerAgent是否已经启动?
- 跨平台判断进程是否存在
- shell 中判断值是否已经在数组中
- shell 中判断值是否已经在数组中
- java判断某个进程是否在启用
- 判断 ActiveX.EXE 是否已经在执行中
- jsp 判断用户是否在数据库中已经存在
- 在Activity中判断Service是否已经运行
- 从Date型中,用Extract、to_char函数分别取年、月、日、时、分、秒的应用举例
- How to convert std::string to LPCWSTR in C++ (Unicode)
- DB2数据库脏读带锁问题
- BW:关于初始化,关于Delta机制,心得
- sql语句-linq语言-lambda表达式对照
- 在纯java中实现跨平台判断该进程是否已经启动
- spring发送邮件
- Android 单元测试和日志输出
- 学习3D地图引擎开发技术心得
- SQL Server 2000 挂起问题
- 获取文件夹文件(C++)
- DB2 load问题
- java条件判断
- 页内搜索:调用IE的查询功能