package com.zt.life.modules.mainPart.utils.OSUtils;
|
|
import com.zt.common.exception.RenException;
|
|
import java.io.BufferedReader;
|
import java.io.InputStreamReader;
|
|
public class ProcessUtils {
|
public static long getProcessId(Process process) {
|
long pid = -1;
|
java.lang.reflect.Field field = null;
|
try {
|
if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) {
|
field = process.getClass().getDeclaredField("handle");
|
} else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) {
|
field = process.getClass().getDeclaredField("pid");
|
} else {
|
throw new RenException("暂不支持该操作系统:获取进程号");
|
}
|
field.setAccessible(true);
|
pid = Kernel32.INSTANCE.GetProcessId((Long)field.get(process));
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return pid;
|
}
|
|
public static void killProcess(long pid) {
|
try {
|
Process process = null;
|
if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) {
|
process = Runtime.getRuntime().exec(new String[]{"cmd", "/c", "taskkill /PID "+pid+" /T /F"});
|
} else if (System.getProperty("os.name").toLowerCase().indexOf("linux") > -1) {
|
process = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "kill -9 "+pid});
|
} else {
|
throw new RenException("暂不支持该操作系统:终止进程!");
|
}
|
int exitCode = process.waitFor();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public static boolean isProcessAlive(long pid) {
|
boolean isAlive = false;
|
try {
|
// 根据不同的操作系统,构造不同的命令
|
String os = System.getProperty("os.name").toLowerCase();
|
String command;
|
if (os.contains("win")) {
|
// Windows 系统
|
command = "tasklist /FI \"PID eq " + pid + "\"";
|
} else {
|
// Unix-like 系统
|
command = "ps -p " + pid;
|
}
|
|
Process process = Runtime.getRuntime().exec(command);
|
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
String line;
|
|
// 判断输出中是否包含进程信息
|
while ((line = reader.readLine()) != null) {
|
if (line.contains(String.valueOf(pid))) {
|
isAlive = true;
|
break;
|
}
|
}
|
|
reader.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return isAlive;
|
}
|
|
}
|