`
godandghost
  • 浏览: 33398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java中判断该进程是否已经启动

阅读更多
思路从http://blog.csdn.net/genww/article/details/6119731所得,稍作修改。

要求做一个Java控制台程序,并要求程序不能同时重复运行。此功能可以通过调用jps命令实现。
方法:
public class Test {

	public static void main(String[] args)
	{
		try {
			boolean run = checkPidInProcess(Test.class.getSimpleName());
			if (!run) {
				System.out.println("Only one.");
			} else {
				System.out.println("More than one.");
				System.exit(0);
			}
			Thread.sleep(10 * 60 * 1000);
		}
		catch (Exception e) {
			e.printStackTrace();
		}

	}

	private static boolean checkProcessInProcess(String className)
			throws Exception
	{
		InputStream in = null;
		String line = null;

		try {
			in = Runtime.getRuntime().exec("jps").getInputStream();
			BufferedReader b = new BufferedReader(new InputStreamReader(in));

			int count = 0;
			while ((line = b.readLine()) != null) {
				if (line.contains(className)) {
					count++;
					if (count > 1) {
						return true;
					}
				}
			}
			return false;
		}
		catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		finally {
			if (in != null) {
				in.close();
			}
		}
	}
}


=====================================================
以下为修改:
上面的放在在eclipse里面执行的时候是成功的,但是如果要将程序打包成jar,并通过控制台或者批处理的方式执行时,就会发生问题。因为当导出jar包时,jps命令只会给出形如"1234 jar"这样的文字,没有类名。这时的处理方式:
1. 将jar包名命名成和类一样的名字。
2. 将上面代码中的一段改成
in = Runtime.getRuntime().exec("jps -mlvV").getInputStream();
带了参数的jps命令可以写出jar包名,这样就可以实现功能了。

注:注意jar包名的大小写。
分享到:
评论

相关推荐

    操作系统之进程调度算法模拟(时间片轮转算法)

    同时,应判断该进程的要求运行时间与已运行时间,若该进程要求运行时间≠已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为...

    bat自动监测并启动程序

    通过监测端口是否开启,来自动启动某一程序,特别适合监测程序是否崩溃并自动再次启动该程序

    Java开发技术大全(500个源代码).

    HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    linux的shell命令检测某个java程序是否执行

    ps -ef |grep java|grep

    操作系统 进程调度(时间片轮转)银行家算法 作业调度

    同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间¹已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    Java面试宝典2020修订版V1.0.1.doc

    7、简述ajax中Js脚本缓存问题该如何解决? 26 8、同步和异步怎么理解?分别在什么情况下使用。 26 9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用...

    java范例开发大全源代码

     实例13 Java中的进制与移位运算符 22  第3章 条件控制语句(教学视频:75分钟) 26  3.1 if控制语句 26  实例14 判断输入的年份是否为闰年 26  实例15 抽奖活动 27  3.2 for语句 28  实例16 ...

    java范例开发大全

    实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列...

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    Java范例开发大全 (源程序)

     实例13 Java中的进制与移位运算符 22  第3章 条件控制语句(教学视频:75分钟) 26  3.1 if控制语句 26  实例14 判断输入的年份是否为闰年 26  实例15 抽奖活动 27  3.2 for语句 28  实例16 小九九...

    Java并发编程(学习笔记).xmind

    (2)确保某个服务在其所依赖的所有其他服务都已经启动之后才启动 (3)等待知道某个操作的所有参与者都就绪再继续执行 CountDownLatch:可以使一个或多个线程等待一组事件发生 FutureTask ...

    java自学之道

    1.1 程序、进程与线程 1.2 线程调度与优先级 1.3 线程的状态与生命周期 1.4 控制一个线程生命周期最常用的方法 2、线程的创建和启动 3、线程的同步与死锁 3.1 同步的概念 3.2 线程同步举例 3.3 线程死锁 六、...

    Java范例开发大全(全书源程序)

    实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17...

    java范例开发大全(pdf&源码)

    实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列...

    java-servlet-api.doc

    所有的JavaServlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。Servlet引擎是Web服务器按照JavaServletAPI定制的扩展。Servlet引擎提供网络服务,能够理解MIME请求,并...

    python多线程DAY02.txt

    判断进程生命周期状态,处于生命周期得到True否则返回False p.name 进程名称 默认为Process-1 p.pid 进程的PID号 p.daemon 默认状态False 主进程退出不会影响子进程执行 如果设置为True 则子进程会随着主进程结束...

Global site tag (gtag.js) - Google Analytics