Java,windows:获取给定PID的进程名称

时间:2014-05-22 12:12:44

标签: java process jetty port pid

在Windows上运行。

我需要从我的程序中知道哪些进程(如Skype)正在端口:80上运行。

我应该能够通过端口:80通过

获取进程的PID

netstat -o -n -a | findstr 0.0:80

从Java中获取具有给定PID的进程名称的最佳方法是什么?

如果有任何方法可以从Java中获取在端口:80上运行的进程的名称,我也会优先考虑。

我需要这个的原因是我的应用程序启动了一个使用端口:80的码头Web服务器。我想警告用户其他服务已经在运行端口:80以防万一。

1 个答案:

答案 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;
}