使用Java获取windows进程的路径

▼魔方 西西 提交于 2019-12-05 19:44:37

最近写一个小程序扫描服务器上项目的启动情况时遇到一问题,就是当服务器多个项目启动时,进程中显示的都是javaw.exe,无法分辨哪个javaw.exe属于哪个项目,所以就想获取进程的路径,但是网上百度都只能获取到进程pid,无法得到进程路径,之后通过google搜到了如下一段代码:

/*1)、取当前进程ID*/
//9420@XMCX pid@计算机名
String pid = ManagementFactory.getRuntimeMXBean().getName();
//@之前为进程ID
pid = pid.substring(0, pid.indexOf('@'));

/*2)、根据进程ID取进程命令路径 D:\jdk1.6.0_18\bin\javaw.exe*/
Sigar sigar = new Sigar();//http://www.oschina.net/p/sigar
System.out.println(sigar.getProcExe(pid).getName());
System.out.println(sigar.getProcArgs(pid)[0]);

刚好同时在CSDN论坛中提问有位大神也回复使用Sigar可以实现,遂下了sigar的jar包,然后一番折腾,终于弄出来了。sigar.jar下载地址

具体实现代码如下:
1、先获取进程的pid,有两种方法:
第一种:

    //tasklist:获取所有进程
    String[] cmd = {"tasklist"};
    try {
        Process process = Runtime.getRuntime().exec(cmd);
        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String string_temp = "";
        while ((string_temp = in.readLine()) != null) {
            //在控制台中打印进程信息
            System.out.println(string_temp);
            if(string_temp.indexOf("进程名") != -1) {
                //截取进程PID
                String pid = string_temp.substring(12, string_temp.indexOf("Console")).trim();
                Sigar sigar = new Sigar();
                //获取进程路径
                String processPath = sigar.getProcExe(pid).getName();
                System.out.println("----进程路径:" + processPath);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

第二种:

//获取当前进程的信息
String name = ManagementFactory.getRuntimeMXBean().getName();
//截取进程id
String pid = name.substring(0, name.indexOf("@"));
Sigar sigar = new Sigar();
try {
    //获取进程路径
    String processPath = sigar.getProcExe(pid).getName();
    System.out.println("进程路径:" + processPath );
} catch (SigarException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

另外,Sigar包很强大,可以获取各种系统信息,大家可以去doc里面去看

对了,在导jar包的时候要顺带把“sigar-amd64-winnt.dll”或者“sigar-x86-winnt.dll”放到项目的根目录下。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!