工作需要, Windows系统定时重启自定义exe程序. 写了如下程序, 按照说明(readme.txt)修改批处理文件中的四个参数即可:

1.readme.txt

第一个参数:进程名(不用带exe)
第二个参数:大屏exe路径
第三个参数:定时任务循环时间(秒)
第四个参数:结束与重启的间隔时间(毫秒)

2.批处理文件dp.bat(注意:第三个参数单位是s,第四个参数单位是ms)

java -jar dp.jar  Foxmail D:\\Tools\\Foxmail\\Foxmail.exe 10 5000
pause

3.task.java(将工程导出为可执行jar包dp.jar, 我的运行环境为jdk1.7,不过和jdk关系应该不大,没测试...)

package com.kd;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; /**
* @author liangyadong
* @date 2017年10月1日 下午1:51:58
* @version 1.0
*/
public class task {
static String cmdStr1=""; //根据pid 结束进程
public static void killProcessByPidName(String pidName) throws Exception {
Runtime.getRuntime().exec("taskkill /F /IM " + pidName + ".exe"); } //根据pidname,exe路径 启动进程
public static void start(String filepath, String pidName) throws Exception {
Runtime.getRuntime().exec("cmd.exe /c start "+filepath); }
//获取所有进程
public static List getCurrOsAllPidNameSet(String pidname) throws Exception {
Set<String> pidNameSet = new HashSet<>();
List l = new ArrayList<>();
InputStream is = null;
InputStreamReader ir = null;
BufferedReader br = null;
String line = null;
String[] array = (String[]) null;
try {
Process p = Runtime.getRuntime().exec("TASKLIST /NH /FO CSV");
is = p.getInputStream();
ir = new InputStreamReader(is);
br = new BufferedReader(ir);
while ((line = br.readLine()) != null) {
array = line.split(",");
line = array[0].replaceAll("\"", "");
line = line.replaceAll(".exe", "");
line = line.replaceAll(".exe".toUpperCase(), "");
if(line.startsWith(pidname)){
l.add(line);
}
}
} catch (IOException localIOException) {
throw new Exception("获取系统所有进程名出错!");
} finally {
if (br != null) {
br.close();
}
if (ir != null) {
ir.close();
}
if (is != null) {
is.close();
}
} return l;
}
public static void main(String[] args) {
final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
final String pidname = args[0];// 参数1 -- 进程名称 
final String cmdStr1 = args[1];// 参数2 -- exe 路径
int time = Integer.parseInt(args[2]);// 参数3 -- 定时任务循环间隔(秒) 
final Long time2 = Long.parseLong(args[3]);// 参数4 -- 结束进程与重新启动进程直接的间隔(毫秒)
System.out.println("----进程名称:"+pidname);
System.out.println("----exe 路径:"+cmdStr1);
System.out.println("----定时任务循环间隔(毫秒):"+time);
System.out.println("----结束进程与重新启动进程直接的间隔(毫秒):"+time2);
Runnable runnable = new Runnable() {
public void run() {
System.out.println();
System.out.println("--------------------------"+new Date()+"新任务开始------------------");
try {
System.out.println(new Date()+"开始结束进程:"+getCurrOsAllPidNameSet(pidname));
Thread.sleep(time2);
killProcessByPidName(pidname);
System.out.println(new Date()+"开始启动进程"+getCurrOsAllPidNameSet(pidname));
start(cmdStr1,pidname);
System.out.println(new Date()+"当前进程:"+getCurrOsAllPidNameSet(pidname));
System.out.println("--------------------------"+new Date()+"新任务结束------------------");
System.out.println();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
try {
killProcessByPidName(pidname);
service.shutdown();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("--------------------------"+new Date()+"任务异常------------------");
System.out.println();
}
}
};
service.scheduleAtFixedRate(runnable, 0, time, TimeUnit.SECONDS); } }

windows系统定时重启自定义exe程序的更多相关文章

  1. Windows系统定时备份MySQL数据库

    当一个网站投入使用时,定期备份数据库是必要的事.那么,在Windows系统上,我们该如何做呢? 如下语句可以实现备份及还原MySQL数据库: 备份MySQL数据库 mysqldump -uroot - ...

  2. windows系统下c语言暂停程序

    原文:windows系统下c语言暂停程序 windows系统下,很多C语言初学者的调试时,往往没看到结果程序就退出了,据我所知的方法主要有以下几种 方法一: #include int main() { ...

  3. windows系统下,在C#程序中自动安装字体

    在Windows系统中,原有自带的字体样式有限,有时候我们的程序会使用到个别稀有或系统不自带的字体.因此我们需要将字体打包到程序中,当程序启动时,检测系统是否有该字体,如果没有则安装该字体,也可以动态 ...

  4. 将Windows系统编译的.NET Core程序发布到Ubuntu系统

    在可移植方面.NET Core应用程序分为两种,Portable application(便捷,需要目标机器安装.NET Core Runtime)和Self-contained applicatio ...

  5. Windows 系统定时自动重启

    1.创建新文本并输入 shutdown -r -t 0 保存成.bat文件 2.创建系统任务计划 2.1 在开始中打开[任务计划程序] 2.2 新建创建任务计划目录 2.3 在新目录下新建任务计划即可 ...

  6. windeployqt.exe 发布windows下qt产生的exe程序

    以官方 Qt 5.4.0+MinGW 开发环境为例,从开始菜单-->Qt 5.4.0-->5.4-->MinGW 4.9 (32-bit)-->Qt 5.4 for Deskt ...

  7. Windows系统使用运行框运行程序

    配置步骤 1. 在非系统盘创建一个新文件夹,自定义名称.将需要使用运行框启动的程序或文件放入文件夹,并将其更改为自己容易记忆的名称 2. 创建环境变量 右击 "此电脑" → &qu ...

  8. Windows系统定时重开或者关机

    at 6:00 /every:M,T,W,Th,F,S,Su cmd /c shutdown -r -t 60 (每天早上6点自动重启一次) at 0:00 /every:M,T,W,Th,F,S,S ...

  9. linux系统定时重启tomcat

    #touch auto-start.sh [root@Linux opt]# echo $LANGen_US.UTF-8 #vim auto-start.sh #!/bin/sh export LAN ...

随机推荐

  1. JAVA压缩解压ZIP文件,中文乱码还需要ANT.JAR包

    package zip; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStrea ...

  2. scala编程第17章学习笔记(1)——集合类型

    列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ...

  3. go语言之进阶篇非结构体匿名字段

    1.非结构体匿名字段 示例 : package main import "fmt" type mystr string //自定义类型,给一个类型改名 type Person st ...

  4. 基础学习:C#中float的取值范围和精度

    float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: float x = 3.5F; 如果在以上声明中 ...

  5. C#代码审查工具 StyleCop

    SourceAnalysis (StyleCop)的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性. SourceAnalysis (StyleCop)不是代码格式化(代码美 ...

  6. rsync同步数据---把左边的文件全部拷贝到右边

    背景,配置好了ssh 使用rsa pulbic key的方式登陆远程服务器.//ssh-keygen -t rsa -b 2048 -f andy-rsync-key -P '' https://he ...

  7. C++的基本类型

  8. Android的View和ViewGroup分析

    1. 概念 Android中的View与我们曾经理解的"视图"不同.在Android中,View比视图具有更广的含义,它包括了用户交互和显示,更像Windows操作系统中的wind ...

  9. 使用sed进行文字替换

    范式: sed -i "s/查找内容/替换后内容/g" `grep 查找内容 -rl 查找开始路径` 例子: #sed -i "s/abc/ABC/g" `gr ...

  10. 修改字段结构之ArcGIS Diagrammer

    在ArcGIS中,修改字段名称.类似和物理顺序是一件不好办的事,特别是需要修改字段比较多的情况下.通常的做法是新建字段-字段计算器赋值-删除原有字段的方法来达到修改的目的.这里介绍另外一种方法. 现需 ...