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

1.readme.txt

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

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

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

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

  1. package com.kd;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.HashSet;
  10. import java.util.List;
  11. import java.util.Set;
  12. import java.util.concurrent.Executors;
  13. import java.util.concurrent.ScheduledExecutorService;
  14. import java.util.concurrent.TimeUnit;
  15.  
  16. /**
  17. * @author liangyadong
  18. * @date 2017年10月1日 下午1:51:58
  19. * @version 1.0
  20. */
  21. public class task {
  22. static String cmdStr1="";
  23.  
  24. //根据pid 结束进程
  25. public static void killProcessByPidName(String pidName) throws Exception {
  26. Runtime.getRuntime().exec("taskkill /F /IM " + pidName + ".exe");
  27.  
  28. }
  29.  
  30. //根据pidname,exe路径 启动进程
  31. public static void start(String filepath, String pidName) throws Exception {
  32. Runtime.getRuntime().exec("cmd.exe /c start "+filepath);
  33.  
  34. }
  35. //获取所有进程
  36. public static List getCurrOsAllPidNameSet(String pidname) throws Exception {
  37. Set<String> pidNameSet = new HashSet<>();
  38. List l = new ArrayList<>();
  39. InputStream is = null;
  40. InputStreamReader ir = null;
  41. BufferedReader br = null;
  42. String line = null;
  43. String[] array = (String[]) null;
  44. try {
  45. Process p = Runtime.getRuntime().exec("TASKLIST /NH /FO CSV");
  46. is = p.getInputStream();
  47. ir = new InputStreamReader(is);
  48. br = new BufferedReader(ir);
  49. while ((line = br.readLine()) != null) {
  50. array = line.split(",");
  51. line = array[0].replaceAll("\"", "");
  52. line = line.replaceAll(".exe", "");
  53. line = line.replaceAll(".exe".toUpperCase(), "");
  54. if(line.startsWith(pidname)){
  55. l.add(line);
  56. }
  57. }
  58. } catch (IOException localIOException) {
  59. throw new Exception("获取系统所有进程名出错!");
  60. } finally {
  61. if (br != null) {
  62. br.close();
  63. }
  64. if (ir != null) {
  65. ir.close();
  66. }
  67. if (is != null) {
  68. is.close();
  69. }
  70. }
  71.  
  72. return l;
  73. }
  74. public static void main(String[] args) {
  75. final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
  76. final String pidname = args[0];// 参数1 -- 进程名称 
  77. final String cmdStr1 = args[1];// 参数2 -- exe 路径
  78. int time = Integer.parseInt(args[2]);// 参数3 -- 定时任务循环间隔(秒) 
  79. final Long time2 = Long.parseLong(args[3]);// 参数4 -- 结束进程与重新启动进程直接的间隔(毫秒)
  80. System.out.println("----进程名称:"+pidname);
  81. System.out.println("----exe 路径:"+cmdStr1);
  82. System.out.println("----定时任务循环间隔(毫秒):"+time);
  83. System.out.println("----结束进程与重新启动进程直接的间隔(毫秒):"+time2);
  84. Runnable runnable = new Runnable() {
  85. public void run() {
  86. System.out.println();
  87. System.out.println("--------------------------"+new Date()+"新任务开始------------------");
  88. try {
  89. System.out.println(new Date()+"开始结束进程:"+getCurrOsAllPidNameSet(pidname));
  90. Thread.sleep(time2);
  91. killProcessByPidName(pidname);
  92. System.out.println(new Date()+"开始启动进程"+getCurrOsAllPidNameSet(pidname));
  93. start(cmdStr1,pidname);
  94. System.out.println(new Date()+"当前进程:"+getCurrOsAllPidNameSet(pidname));
  95. System.out.println("--------------------------"+new Date()+"新任务结束------------------");
  96. System.out.println();
  97. } catch (Exception e) {
  98. // TODO Auto-generated catch block
  99. e.printStackTrace();
  100. try {
  101. killProcessByPidName(pidname);
  102. service.shutdown();
  103. } catch (Exception e1) {
  104. // TODO Auto-generated catch block
  105. e1.printStackTrace();
  106. }
  107. System.out.println("--------------------------"+new Date()+"任务异常------------------");
  108. System.out.println();
  109. }
  110. }
  111. };
  112. service.scheduleAtFixedRate(runnable, 0, time, TimeUnit.SECONDS);
  113.  
  114. }
  115.  
  116. }

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. 解决谷歌google不能访问造成wordpress打开缓慢的问题

    近日谷歌又不能访问了,开始没觉得有什么问题.对于技术控的我一直以来谷歌搜索是我的必备工具,这次似乎和往常不太一样,好几天了还是不能访问,通过修改hosts等办法还是没用,只有FQ出去才能访问,但总不能 ...

  2. 再有人问你synchronized是什么,就把这篇文章发给他

    在再有人问你Java内存模型是什么,就把这篇文章发给他.中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronize ...

  3. 500 OOPS: vsftpd: cannot locate user specified in 'chown_username':whoever

    错误:500 OOPS: vsftpd: cannot locate user specified in 'chown_username':whoever解决方案:在vsftpd.conf中修改如下两 ...

  4. 【BZOJ】【3612】【HEOI 2014】平衡

    DP 唉我还是too naive 这是个整数划分题…… 我想的DP方式是f[i][j][k]表示前 i 个数拼出 j 用了 k 个数的方案数…… 转移当然是比较直观…… 但是只能得30分QAQ 正确的 ...

  5. SVN使用小结

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

  6. ORA-12560: TNS: 协议适配器错误的解决方法

    ORA-12560: TNS: 协议适配器错误的解决方法 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个: 1.监听服务没有起起来.windows平台个一如下操作:开始---程序 ...

  7. 第六章 HashSet源码解析

    6.1.对于HashSet需要掌握以下几点 HashSet的创建:HashSet() 往HashSet中添加单个对象:即add(E)方法 删除HashSet中的对象:即remove(Object ke ...

  8. Bootstrap学习js插件篇之提示框

    案例 受到Jason Frame开发的jQuery.tipsy插件的启发,我们才把这个工具提示插件做的更好,而且此插件不依赖图片,只是使用CSS3来实现动画效果,并使用data属性存储标题. 将鼠标悬 ...

  9. python 读写CSV文件

    #-*- coding: UTF-8 -*- import csv import os def WriteToCsv(): '''写CSV文件''' titls = ['序号', '链接', '备注' ...

  10. 自己定义带三角形箭头的TextView

    <?xml version="1.0" encoding="utf-8"? > <resources>      <declare ...