工作需要, 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. dom4j怎么获得指定名称的节点信息

    <?xml version="1.0" encoding="utf-8" ?> <MgUtil> <db_config> & ...

  2. 一个VLAN配置的实际例子

    背景很简单,和一般的eth-switch通过VLAN做成路由的方式一样.     首先看一种硬件效率较高的方法: Port1~4作为access口,同时在硬件上作为用户模式,即从PC发往这些端口的数据 ...

  3. Rsync服务介绍与配置

    Rsync 简要介绍 rsync 是一个用于增量文件传输的开源工具,不得不说,rsync简直是不同服务器间传输文件.同步文件的利器.与FTP相比,它具有非常简单的安装和配置方法.而且,rsync可以只 ...

  4. Decorator Wrapper 装饰模式 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. SQL基础(一):SQL语法和命令

    一.语法: 1.SQL 对大小写不敏感:SELECT 与 select 是相同的. 2.某些数据库系统要求在每条 SQL 语句的末端使用分号.分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样 ...

  6. 深入理解JSON

    一.JS判断字符串是否为JSON的方法: function isJSON(str) { if (typeof str == 'string') { try { JSON.parse(str); ret ...

  7. IIS-网站发布之后访问HTTP 错误 403.14 - Forbidden

    这种问题一般是因为页面本身发生了错误的原因导致的,这个时候先开启[目录浏览]功能 开通目录浏览之后再重新访问,就能看到相应的错误了,再去进行相应的解决就可以了.

  8. 开学了!这些Linux认证你要知道

    大家好,今天我们将认识一些非常有价值的全球认可的Linux认证.Linux认证是不同的Linux专业机构在全球范围内进行的认证程序.Linux认证可以让Linux专业人才可以在服务器领域或相关公司等等 ...

  9. OpenSSL 中 RSA 加密解密实现源代码分析

    1.RSA 公钥和私钥的组成.以及加密和解密的公式: 2.模指数运算: 先做指数运算,再做模运算.如 5^3 mod 7 = 125 mod 7 = 6 3.RSA加密算法流程: 选择一对不同的.而且 ...

  10. [Debug] Debug Node.js Application by using Chrome Dev tools

    For example you have a server.js file, and you want to debug some problems; What you can do is: node ...