使用Java获取windows进程的路径

xiaoxiao2021-02-28  45

最近写一个小程序扫描服务器上项目的启动情况时遇到一问题,就是当服务器多个项目启动时,进程中显示的都是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]);

刚好同时在论坛中提问有位大神也回复使用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”放到项目的根目录下。

转载请注明原文地址: https://www.6miu.com/read-75800.html

最新回复(0)