思路从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包名的大小写。
分享到:
相关推荐
同时,应判断该进程的要求运行时间与已运行时间,若该进程要求运行时间≠已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为...
通过监测端口是否开启,来自动启动某一程序,特别适合监测程序是否崩溃并自动再次启动该程序
HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
ps -ef |grep java|grep
同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间¹已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态...
1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...
7、简述ajax中Js脚本缓存问题该如何解决? 26 8、同步和异步怎么理解?分别在什么情况下使用。 26 9、java后台如何接收ajax数据? 26 10、为什么要有jquery? 26 11、jQuery选择器有多少种? 27 13、你是如何使用...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 ...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列...
答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九...
(2)确保某个服务在其所依赖的所有其他服务都已经启动之后才启动 (3)等待知道某个操作的所有参与者都就绪再继续执行 CountDownLatch:可以使一个或多个线程等待一组事件发生 FutureTask ...
1.1 程序、进程与线程 1.2 线程调度与优先级 1.3 线程的状态与生命周期 1.4 控制一个线程生命周期最常用的方法 2、线程的创建和启动 3、线程的同步与死锁 3.1 同步的概念 3.2 线程同步举例 3.3 线程死锁 六、...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17...
实例13 Java中的进制与移位运算符 22 第3章 条件控制语句(教学视频:75分钟) 26 3.1 if控制语句 26 实例14 判断输入的年份是否为闰年 26 实例15 抽奖活动 27 3.2 for语句 28 实例16 小九九乘法表 28 实例17 如何列...
所有的JavaServlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。Servlet引擎是Web服务器按照JavaServletAPI定制的扩展。Servlet引擎提供网络服务,能够理解MIME请求,并...
判断进程生命周期状态,处于生命周期得到True否则返回False p.name 进程名称 默认为Process-1 p.pid 进程的PID号 p.daemon 默认状态False 主进程退出不会影响子进程执行 如果设置为True 则子进程会随着主进程结束...