日期:2014-05-20 浏览次数:20986 次
package CSDNTest;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ProcessHandler {
/**
* @author coldanimal; ProcessHandler windowns version.
*/
public static boolean findRunningProcess(String processName) {
String platform = System.getProperty("os.name");
if (platform.contains("Windows")) {
return findRunningWindowsProcess(processName);
} else if (platform.contains("Linux")) {
return findRunningLinuxProcess(processName);
} else {
throw new RuntimeException("Unknown platform " + platform);
}
}
private static boolean findRunningLinuxProcess(String processName) {
return false;
}
private static boolean findRunningWindowsProcess(String processName) {
BufferedReader bufferedReader = null;
Process proc = null;
try {
proc = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq " + processName + "\"");
bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(processName)) {
return true;
}
}
return false;
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception ex) {
}
}
if (proc != null) {
try {
proc.destroy();
} catch (Exception ex) {
}
}
}
}
public static boolean killRunningProcess(String processName){
String platform = System.getProperty("os.name");
if(platform.contains("Windows")){
return killRunningWindowsProcess(processName);
}else if(platform.contains("Linux")){
return false;
}
throw new RuntimeException("Unkown platform " + platform);
}
private static boolean killRunningWindowsProcess(String processName){
try {
Runtime.getRuntime().exec("taskkill /IM " + processName);
System.out.println("kill process successful");
System.out.println("Process " + processName + " was killed. Mission completed.");
return true;
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("kill process fail");
System.out.println("Misson failed.");
return false;
}
}
public static void main(String[] args) {
if(ProcessHandler.findRunningProcess("notepad.exe")){
ProcessHandler.killRunningProcess("notepad.exe");
}
}
}
------解决方案--------------------
在 XP 下有 tasklist.exe 它会返回当前运行的进程。你再用程序读取这个输出就可以解析查找里面的 notepad.exe.
Process p = Runtime.getRuntime().execute("cmd.exe /c tasklist.exe");
InputStream input = p.getInputStream();
...
我们用 cmd.exe /c tasklist.exe | find "flashget.exe" 这时区分大小写的,不合适,可能要自己用代码不区分大小写的方式去查找 notepad.exe 。
C:\WINDOWS\system32>tasklist | find "flashget.exe"
flashget.exe 4564 Console 0 8,752 K