使用Java获取windows进程的路径

来源:互联网 发布:sql查询分析器区别 编辑:程序博客网 时间:2024/05/16 10:44

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

/*1)、取当前进程ID*///9420@XMCX pid@计算机名String pid = ManagementFactory.getRuntimeMXBean().getName();//@之前为进程IDpid = pid.substring(0, pid.indexOf('@'));/*2)、根据进程ID取进程命令路径 D:\jdk1.6.0_18\bin\javaw.exe*/Sigar sigar = new Sigar();//http://www.oschina.net/p/sigarSystem.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();//截取进程idString 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”放到项目的根目录下。

原创粉丝点击