工作需要, 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. QT vs x64编译

    下载qt-everywhere-opensource-src-5.3.0 这个设置非常重要,不对的话,一大堆编译错误,已经折腾了好多回了 configure -mp -confirm-license ...

  2. 魅族MX3 smart bar处失灵

    MX3的分辨率是1800X1080,改成1750X1080 adb shell wm size 1080x1750

  3. 【BZOJ】【1941】【SDOI2010】Hide and Seek

    KD-Tree 一开始看错题了

  4. SVN使用小结

    SVN是Subversion的简称.是一个开放源码的版本号控制系统.在它的管理下,文件和文件夹能够超越时空的限制,权且当作一种奇妙的"时间机器"吧. 基本功能 版本号控制 作为一个 ...

  5. cgroup子系统2_devices子系统

    devices子系统用于控制cgroup中全部进程能够訪问哪些设备,三个控制文件:devices.allow,devices.deny,devices.list. devices.allow用于指定c ...

  6. C#中三种定时器对象的比较 【转】

    https://www.cnblogs.com/zxtceq/p/5667281.html C#中三种定时器对象的比较 ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.W ...

  7. iOS开发-多线程简介

    多线程从概念上理解是指从软件或者硬件上实现多个线程并发执行的技术,简单点理解就是同一时间可以执行多个事情(比如说一边听歌一边码代码),听歌是一个线程,码代码是一个线程,如果是单核CPU的话,上面两个动 ...

  8. 【右滑返回】滑动冲突 Scroller DecorView

    基本思想 我们的滑动逻辑主要是利用View的scrollBy() 方法, scrollTo()方法和Scroller类来实现的 当手指拖动视图的时候,我们监听手指在屏幕上滑动的距离 利用View的sc ...

  9. 按示例学python:使用python抓取网页正文

    平时打开一个网页,除了文章的正文内容,通常会有一大堆的导航,广告和其他方面的信息.本博客的目的,在于说明如何从一个网页中提取出文章的正文内容,而过渡掉其他无关的的信息. 这里先看看 demo : ht ...

  10. 【PAT Advanced Level】1013. Battle Over Cities (25)

    这题给定了一个图,我用DFS的思想,来求出在图中去掉某个点后还剩几个相互独立的区域(连通子图). 在DFS中,每遇到一个未访问的点,则对他进行深搜,把它能访问到的所有点标记为已访问.一共进行了多少次这 ...