进程监控程序保证已运行程序不间断的运行,要保证不间断运行需要两个部分:
1.java程序中使用while语句(也可以使用进程),每隔端时间检查一次;
2.使用bat文件,如果程序未运行,让java程序运行bat文件,启动程序,再次运行;bat文件放在项目根目录即可。
java程序如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
public class ThreadKeepTools {
public static void ExcuteThread() throws InterruptedException{
String strFilePath="cloudmusic.exe";//(网易云音乐)
String strBatPath="test.bat";
while(true){
System.out.println("strFilePath:"+strFilePath);
boolean RunOrNOT=isRunning2(strFilePath);
System.out.println("RunOrNot:"+RunOrNOT);
if(!RunOrNOT){
try {
System.out.println("开始执行程序!");
Runtime.getRuntime().exec("cmd /k start "+strBatPath);
System.out.println("strbatpath:"+strBatPath);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
Thread.sleep(6000);
}
Thread.sleep(10000);
}
}
public static void main(String[] args) {
try {
ExcuteThread();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static boolean isRunning2(String processName)//processName-进程名
{
BufferedReader bufferedReader = null;
try
{
Process proc = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq "
+ processName
+ "\"");
bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while ((line = bufferedReader.readLine()) != null)
{
if (line.contains(processName)) //判断是否存在
{
return true;
}
}
return false;
}
catch (Exception ex)
{
ex.printStackTrace();
return false;
}
finally
{
if (bufferedReader != null)
{
try
{
bufferedReader.close();
}
catch (Exception ex)
{
}
}
}
}
}
bat文件如下:
@echo off
echo 准备再次启动程序(网易云音乐)。。。
start F:\CloudMusic\cloudmusic.exe
exit