在Windows上运行。
我需要从我的程序中知道哪些进程(如Skype)正在端口:80
上运行。
我应该能够通过端口:80
通过
netstat -o -n -a | findstr 0.0:80
。
从Java中获取具有给定PID的进程名称的最佳方法是什么?
如果有任何方法可以从Java中获取在端口:80
上运行的进程的名称,我也会优先考虑。
我需要这个的原因是我的应用程序启动了一个使用端口:80
的码头Web服务器。我想警告用户其他服务已经在运行端口:80
以防万一。
答案 0 :(得分:0)
所以我使用两个Process工作。一个用于获取PID,另一个用于获取名称。
这是:
private String getPIDRunningOnPort80() {
String cmd = "cmd /c netstat -o -n -a | findstr 0.0:80";
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
p = rt.exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
StringBuffer sbInput = new StringBuffer();
BufferedReader brInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader brError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
try {
while ((line = brError.readLine()) != null) {
}
} catch (IOException e) {
e.printStackTrace();
}
try {
while ((line = brInput.readLine()) != null) {
sbInput.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try {
p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
p.destroy();
String resultString = sbInput.toString();
resultString = resultString.substring(resultString.lastIndexOf(" ", resultString.length())).replace("\n", "");
return resultString;
}
private String getProcessNameFromPID(String pid) {
Process p = null;
try {
p = Runtime.getRuntime().exec("tasklist");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StringBuffer sbInput = new StringBuffer();
BufferedReader brInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
String foundLine = "UNKNOWN";
try {
while ((line = brInput.readLine()) != null) {
if (line.contains(pid)){
foundLine = line;
}
System.out.println(line);
sbInput.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
try {
p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
p.destroy();
String result = foundLine.substring(0, foundLine.indexOf(" "));
return result;
}