日期:2014-05-17  浏览次数:20699 次

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(6