Java如何获取当前进程ID以及所有Java进程的进程ID

发布时间 - 2026-01-11 01:42:43    点击率:

首先是获取当前Java运行的Java进程ID,这个是网上常见的,也就是Java程序自身将进程ID打印出来:

package com.test;

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

public class Target {

  public static void main(String[] args) throws InterruptedException {
    System.out.println(getProcessID());
    while(true) {
      Thread.sleep(10000);
    }
  }

  public static final int getProcessID() { 
    RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
    System.out.println(runtimeMXBean.getName());
    return Integer.valueOf(runtimeMXBean.getName().split("@")[0]) 
        .intValue(); 
  } 

}

运行结果:

2896@PC-20150603VRPL
2896

ManagementFactory是一个在运行时管理和监控Java VM的工厂类,它能提供很多管理VM的静态接口,比RuntimeMXBean;

RuntimeMXBean是Java虚拟机的运行时管理接口.

当前进程ID为2896。

但这种让Java进程自行打印ID的方式并不太好用,因为很多时候我们是需要在不修改代码另一个Java程序代码的情况下知道这个正在运行着的Java进程的ID,如果你也有这个需求,可以看一下下面的解决方法:

获取所有正在运行着的Java进程

package com.test;

import java.util.HashSet;
import java.util.Set;

import sun.jvmstat.monitor.MonitoredHost;
import sun.jvmstat.monitor.MonitoredVm;
import sun.jvmstat.monitor.MonitoredVmUtil;
import sun.jvmstat.monitor.VmIdentifier;

public class ProcessID {

  public static void main(String[] args) throws Exception {
     // 获取监控主机
     MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");
     // 取得所有在活动的虚拟机集合
     Set<?> vmlist = new HashSet<Object>(local.activeVms());
     // 遍历集合,输出PID和进程名
     for(Object process : vmlist) {
       MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + process));
       // 获取类名
       String processname = MonitoredVmUtil.mainClass(vm, true);
       System.out.println(process + " ------> " + processname);
     }
   }
}

运行结果:

2752 ------> 
5172 ------> com.test.Target
5308 ------> com.test.ProcessID

这样,就可以根据类名找到进程号了。

MonitoredHost等类位于${JAVA_HOME}/lib/tools.jar

下面是一个可以直接根据类找到对应Java进程ID的方法:

package com.test;

import java.net.URISyntaxException;
import java.util.HashSet;
import java.util.Set;

import sun.jvmstat.monitor.MonitorException;
import sun.jvmstat.monitor.MonitoredHost;
import sun.jvmstat.monitor.MonitoredVm;
import sun.jvmstat.monitor.MonitoredVmUtil;
import sun.jvmstat.monitor.VmIdentifier;

public class ProcessID {

  public static void main(String[] args) throws Exception {
     int pid = getProcess(Target.class);
     System.out.println("PID: "+pid);
  }

  public static int getProcess(Class<?> cls) throws MonitorException, URISyntaxException {
    if(cls == null) {
      return -1;
    }

    // 获取监控主机
    MonitoredHost local = MonitoredHost.getMonitoredHost("localhost");
    // 取得所有在活动的虚拟机集合
    Set<?> vmlist = new HashSet<Object>(local.activeVms());
    // 遍历集合,输出PID和进程名
    for(Object process : vmlist) {
      MonitoredVm vm = local.getMonitoredVm(new VmIdentifier("//" + process));
      // 获取类名
      String processname = MonitoredVmUtil.mainClass(vm, true);
      if(cls.getName().equals(processname)) {
        return ((Integer)process).intValue();
      }
    }
    return -1;
  }
}

运行结果:

PID: 5172

源码位于我的Github项目aoptracer的com.test包里

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # 获取当前进程id  # 当前进程id  # 获取进程id  # Java进程cpu占用过高问题解决  # JAVA进程突然消失问题解决方案  # Linux服务器Java进程消失问题解决  # java生成jar包并且单进程运行的实例  # Java基础强化训练输入错误即结束进程  # 简述Java中进程与线程的关系_动力节点Java学院整理  # 详谈java线程与线程、进程与进程间通信  # SHELL脚本监控JAVA进程的代码  # java自带的工具Jstack截取进程中的堆栈信息  # 简要分析Java多进程编程的并发控制  # 浅谈Java多进程程序的运行模式  # 详解Java中多进程编程的实现  # java 进程是如何在Linux服务器上进行内存分配的  # 是一个  # 遍历  # 正在运行  # 如果你  # 也有  # 可以直接  # 看一下  # 好用  # 它能  # 解决方法  # 大家多多  # 包里  # 就可以  # 打印出来  # 号了  # 情况下  # 网上  # int  # final  # runtimeMXBean 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何优化应用性能?(缓存和优化命令)  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  在Oracle关闭情况下如何修改spfile的参数  微信小程序 HTTPS报错整理常见问题及解决方案  Laravel怎么实现验证码(Captcha)功能  Laravel如何使用Blade模板引擎?(完整语法和示例)  JS弹性运动实现方法分析  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel怎么使用artisan命令缓存配置和视图  详解vue.js组件化开发实践  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  什么是javascript作用域_全局和局部作用域有什么区别?  如何选择可靠的免备案建站服务器?  如何在建站宝盒中设置产品搜索功能?  LinuxCD持续部署教程_自动发布与回滚机制  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  ,怎么在广州志愿者网站注册?  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何注册花生壳免费域名并搭建个人网站?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何配置Horizon来管理队列?(安装和使用)  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  网站制作报价单模板图片,小松挖机官方网站报价?  如何为不同团队 ID 动态生成多个独立按钮  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Laravel观察者模式如何使用_Laravel Model Observer配置  如何在Windows服务器上快速搭建网站?  Android okhttputils现在进度显示实例代码  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  如何快速搭建自助建站会员专属系统?  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何破解联通资金短缺导致的基站建设难题?