`
liufei.fir
  • 浏览: 675889 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java管理windows进程

阅读更多
package org.zzuli.xmsb;

/**
 * 封装一个进程的信息。
 * 
 * @author 刘飞
 * 
 */
public class WindowsTask {
	/**
	 * 映像名称
	 */
	private String name;
	/**
	 * PID
	 */
	private Integer pid;
	/**
	 * 会话名
	 */
	private String sessionName;
	/**
	 * 会话编号
	 */
	private Integer sessionId;
	/**
	 * 内存使用
	 */
	private long mem;

	@Override
	public String toString() {
		return "映像名称:\t" + name + ", PID:\t" + pid + ", 会话名:\t" + sessionName
				+ ", 会话编号:\t" + sessionId + ", 内存使用:\t" + mem + " K\n";
	}

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * @return the pid
	 */
	public Integer getPid() {
		return pid;
	}

	/**
	 * @param pid the pid to set
	 */
	public void setPid(Integer pid) {
		this.pid = pid;
	}

	/**
	 * @return the sessionName
	 */
	public String getSessionName() {
		return sessionName;
	}

	/**
	 * @param sessionName the sessionName to set
	 */
	public void setSessionName(String sessionName) {
		this.sessionName = sessionName;
	}

	/**
	 * @return the sessionId
	 */
	public Integer getSessionId() {
		return sessionId;
	}

	/**
	 * @param sessionId the sessionId to set
	 */
	public void setSessionId(Integer sessionId) {
		this.sessionId = sessionId;
	}

	/**
	 * @return the mem
	 */
	public long getMem() {
		return mem;
	}

	/**
	 * @param mem the mem to set
	 */
	public void setMem(long mem) {
		this.mem = mem;
	}
}
package org.zzuli.xmsb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Set;
import java.util.Map.Entry;

/**
 * 进程管理
 * 
 * @author 刘飞
 * 
 */
public class JavaWindowsTaskManager {

	private static final String X = " ";
	private static final String TSKILL_CMD = "tskill";
	private static final String REPLACEMENT = "";
	private static final String STRING = ",";
	private static final String K = "K";
	private static final String UTF_8 = "UTF-8";
	private static final String TASK_LIST_CMD = "taskList";

	/**
	 * 杀死一个进程
	 * 
	 * @param task
	 *            进程号
	 * @throws IOException
	 * 
	 */
	public static void killTask(Integer pid) throws IOException {
		/**
		 * 取得计算机所有进程任务列表
		 */
		Hashtable<Integer, WindowsTask> tasks = getTaskList();
		WindowsTask task = tasks.get(pid);
		if (task != null) {
			Runtime.getRuntime().exec(TSKILL_CMD + X + pid);
		}
	}

	/**
	 * 杀死指定名称的所有进程
	 * 
	 * @param taskName
	 *            进程服务名称
	 * @throws IOException
	 */
	public static void killTask(String taskName) throws IOException {
		Hashtable<Integer, WindowsTask> tasks = getTaskList();
		Collection<WindowsTask> allTasks = tasks.values();
		for (WindowsTask task : allTasks) {
			if (task.getName().equals(taskName)) {
				killTask(task.getPid());
			}
		}
	}

	/**
	 * 返回当前机器的所有进程
	 * 
	 * @return
	 * @throws IOException
	 */
	public static Hashtable<Integer, WindowsTask> getTaskList()
			throws IOException {
		Hashtable<Integer, WindowsTask> tasks = new Hashtable<Integer, WindowsTask>();

		Process process = Runtime.getRuntime().exec(TASK_LIST_CMD);
		InputStreamReader in = new InputStreamReader(process.getInputStream(),
				UTF_8);
		BufferedReader reader = new BufferedReader(in);
		String taskInfo = null;
		String tmp = null;

		while ((taskInfo = reader.readLine()) != null) {
			if (taskInfo.trim().length() > 0
					&& taskInfo.toUpperCase().indexOf(K) != -1) {

				WindowsTask task = new WindowsTask();

				tmp = taskInfo.substring(0, 26);
				task.setName(tmp.trim());

				tmp = taskInfo.substring(26, 35);
				task.setPid(Integer.valueOf(tmp.trim()));

				tmp = taskInfo.substring(35, 52);
				task.setSessionName(tmp.trim());

				tmp = taskInfo.substring(52, 64);
				task.setSessionId(Integer.valueOf(tmp.trim()));

				tmp = taskInfo.substring(64, taskInfo.lastIndexOf(K));
				tmp = tmp.replaceAll(STRING, REPLACEMENT);
				task.setMem(Long.valueOf(tmp.trim()).longValue());

				tasks.put(task.getPid(), task);
			}
		}

		return tasks;
	}

	public static void main(String[] args) throws IOException {
		Hashtable<Integer, WindowsTask> tasks = getTaskList();
		Set<Entry<Integer, WindowsTask>> taskEntry = tasks.entrySet();
		for (Entry<Integer, WindowsTask> entry : taskEntry) {

			Integer key = entry.getKey();
			WindowsTask value = entry.getValue();

			System.out.println(key + " : " + value);

			if (value.getName().equals("WINWORD.EXE")) {
				killTask(value.getName());
			}
		}
	}

	/**
	 * 启动一个进程,传入的值可以是服务名,也可以是可执行文件的全路径名
	 * 
	 * @param task
	 * @throws IOException
	 */
	public static void startTask(String task) throws IOException {
		Runtime.getRuntime().exec(task);
	}
}
package org.zzuli.xmsb.service;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.zzuli.xmsb.JavaWindowsTaskManager;

/**
 * Servlet implementation class for Servlet: JavaWindowsTaskManagerService
 * 
 */
public class JavaWindowsTaskManagerService extends
		javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	
	private Logger logger = Logger.getLogger(JavaWindowsTaskManagerService.class.getName()) ;
	
	private static final String START = "start";
	private static final String KILL = "kill";
	private static final String NAME = "name";
	private static final String STYLE = "style";
	private static final long serialVersionUID = 1L;

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public JavaWindowsTaskManagerService() {
		super();
	}

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
	 *      HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}

	/*
	 * (non-Java-doc)
	 * 
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
	 *      HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String style = request.getParameter(STYLE);
		String process_name = request.getParameter(NAME);
		logger.log(Level.ALL, style.equalsIgnoreCase(KILL) ? "杀死" : "启动" + "进程: " + process_name) ;

		if (style.equalsIgnoreCase(KILL)) {
			logger.log(Level.ALL, "杀死进程:" + process_name) ;
			try {
				JavaWindowsTaskManager.killTask(process_name);
				logger.log(Level.ALL, "成功杀死进程:" + process_name) ;
			} catch (Exception e) {
				logger.log(Level.ALL, "杀死进程:" + process_name + "异常\n" + e.getLocalizedMessage()) ;
			}
		} 
		else if (style.equalsIgnoreCase(START)) {
			logger.log(Level.ALL, "启动进程:" + process_name) ;
			try {
				JavaWindowsTaskManager.startTask(process_name);
				logger.log(Level.ALL, "成功启动进程:" + process_name) ;
			} catch (Exception e) {
				logger.log(Level.ALL, "启动进程:" + process_name + "异常\n" + e.getLocalizedMessage()) ;
			}
			
		} 
		else {
			// no cmd
			logger.log(Level.ALL, "无命令执行") ;
		}

	}
}
分享到:
评论

相关推荐

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    Windows下设置守护进程JAR包挂掉自动重启,bat文件(已完美测试)

    这个bat脚本资源可以在Windows环境下实现Java程序的守护进程和自动重启。它通过一个循环监控Java程序进程,如果检测到程序异常退出,会自动重启程序。同时具有可配置的重启次数和重启间隔时间。 这个小巧但实用的bat...

    Java Web编程宝典

    《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...

    集成Java应用程序到Windows操作环境

    如果你想在任务管理器中及Windows XP分组的用户友好任务栏里以你的进程名取代java.exe的出现,那么exe4j可以完成这个工作。exe4j帮助你以一种安全的方式启动你的 java应用程序,来显示本地启动画面,检测及发布合适...

    Java项目:超市购物商城管理系统(java+SSM+JSP+jQuery+Mysql)

    1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1...

    少儿编程管理系统代码 java少儿编程管理系统代码

    少儿编程系统代码 java少儿编程系统代码 基于SSM的少儿编程系统代码 1、少儿编程系统的技术栈、环境、工具、软件: ① 系统环境:Windows/Mac ② 开发语言:Java ③ 框架:SSM ④ 架构:B/S、MVC ⑤ 开发环境:IDEA、...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    基于Java+SQL server的会展中心管理系统.zip

    在学习了数据库原理和 SQL Server 2008 数据库管理系统后,采用 Java 编程语言开发工具,设计并实现会展中心管理系统。 会展中心管理系统具体包含如下几个功能: 管理员功能: (1)录入展商,展馆,展品,展会的...

    《Java Web编程宝典(十年典藏版)》光盘源码

    《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...

    基于java实现门户管理系统(JAVA Portal Management System)分享

    Java的跨平台特性使得Java程序可以在任何支持Java虚拟机的操作系统上运行,包括Windows、Linux、Mac OS等。这使得Java程序的开发和部署变得更加灵活和方便。 Java程序的编写需要遵循面向对象的编程思想,即将程序...

    编程训练管理系统代码 java编程训练管理系统代码

    编程训练系统代码 java编程训练系统代码 基于springboot的编程训练系统代码 1、编程训练系统的技术栈、环境、工具、软件: ① 系统环境:Windows/Mac ② 开发语言:Java ③ 框架:SpringBoot ④ 架构:B/S、MVC ⑤ ...

    超精美java员工管理系统(mysql)

    本课题设计主是解决公司人事信息在日常统计计算中涉及到的一些信息处理问 题,目标是使工作量统计计算管理实现...本课题是基于Windows10硬件环境的数据库管理,后台数据库采用mysql-5.7.1,结合Java编程语言进行开发。

    基于java实现作业管理系统设计附项目源码+文档说明

    Java的跨平台特性使得Java程序可以在任何支持Java虚拟机的操作系统上运行,包括Windows、Linux、Mac OS等。这使得Java程序的开发和部署变得更加灵活和方便。 Java程序的编写需要遵循面向对象的编程思想,即将程序...

    Windows进程管理工具设计与实现

    Windows进程管理工具设计与实现,springmvc,mysql,有后台分页,富文本编辑器,附件上传,文件上传,时间选择器等等的源代码,保证可以运行,带导入视频

    java程序产品包模板-内置linux和Windows通用shell启动停止脚本(无需系统安装Java运行环境).zip

    java程序通用的产品包模板,启停脚本可以同时兼容普通java工程和springboot工程,如有定制化需求可以自行扩展。

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

Global site tag (gtag.js) - Google Analytics