原创地址:http://blog.lichengwu.cn/java/2012/01/18/get-jvm-pid-on-multi-platform/
对于不同平台,获取java进程id有不同的方法,这个做一个总结,写一个工具类。
这个工具主要进行两种尝试来获得pid:
- 从 java.lang.management.RuntimeMXBean获得
- 从操作系统获得
- windows系统
- 非windows系统
工具代码:
/** * Process ID in Java * * @author lichengwu * @created 2012-1-18 * * @version 1.0 */ public final class PID { private static final Log log = LogFactory.getLog(PID.class); /** * 私有构造方法 */ private PID() { super(); } /** * 获得java进程id * * @author lichengwu * @created 2012-1-18 * * @return java进程id */ public static final String getPID() { String pid = System.getProperty("pid"); if (pid == null) { RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); String processName = runtimeMXBean.getName(); if (processName.indexOf('@') != -1) { pid = processName.substring(0, processName.indexOf('@')); } else { pid = getPIDFromOS(); } System.setProperty("pid", pid); } return pid; } /** * 从操作系统获得pid * <p> * 对于windows,请参考:http://www.scheibli.com/projects/getpids/index.html * * @author lichengwu * @created 2012-1-18 * * @return */ private static String getPIDFromOS() { String pid = null; String[] cmd = null; File tempFile = null; String osName = ParameterUtil.getParameter(Parameter.OS_NAME); // 处理windows if (osName.toLowerCase().contains("windows")) { FileInputStream fis = null; FileOutputStream fos = null; try { // 创建临时getpids.exe文件 tempFile = File.createTempFile("getpids", ".exe"); File getpids = new File(ParameterUtil.getResourcePath("getpids.exe")); fis = new FileInputStream(getpids); fos = new FileOutputStream(tempFile); byte[] buf = new byte[1024]; while (fis.read(buf) != -1) { fos.write(buf); } // 获得临时getpids.exe文件路径作为命令 cmd = new String[] { tempFile.getAbsolutePath() }; } catch (FileNotFoundException e) { log.equals(e); } catch (IOException e) { log.equals(e); } finally { if (tempFile != null) { tempFile.deleteOnExit(); } Closer.close(fis, fos); } } // 处理非windows else { cmd = new String[] { "/bin/sh", "-c", "echo $$ $PPID" }; } InputStream is = null; ByteArrayOutputStream baos = null; try { byte[] buf = new byte[1024]; Process exec = Runtime.getRuntime().exec(cmd); is = exec.getInputStream(); baos = new ByteArrayOutputStream(); while (is.read(buf) != -1) { baos.write(buf); } String ppids = baos.toString(); // 对于windows参考:http://www.scheibli.com/projects/getpids/index.html pid = ppids.split(" ")[1]; } catch (Exception e) { log.error(e); } finally { if (tempFile != null) { tempFile.deleteOnExit(); } Closer.close(is, baos); } return pid; } }
相关推荐
功能:获取java进程pid 进程可根据该pid调用exec自杀 注意事项:不能改变PidTool.java所在的包,否则需要重行生成dll。 编译命令中 "-PidTool.dll" 改为 "-FePidTool.dll",我整漏了! 使用方法: 1.javac PidTool...
实现Java通过进程名称杀进程,列子中主要实现在windows操作系统中,将进程名称为java-test.exe的进程kill掉。
根据进程ID获取进程的内存使用量,CPU使用率,线程个数据信息,GetSysInfo
本人写了一个java进程通信的工具jar,方便大家简单的使用java进程通信。 开启守护进程,获取消息: package com.test; import org.msun.process.ProcessMonitor; import org.msun.process.ProcessMonitor....
通过进程id获取到所在进程的主窗口的句柄,及通过该主窗口句柄获取当前主窗口的标题,进程名;这是一个demo例程,仅供参考
Process 启动进程Process 启动进程Process 启动进程
JAVA Process 使用JAVA Process 使用JAVA Process 使用JAVA Process 使用JAVA Process 使用JAVA Process 使用
id.Format("%d",info->th32ProcessID);//获取当前进程ID m_list.InsertItem(i,id);//插入一个项目 m_list.SetItemData(i,info->th32ProcessID);//设置项目值 id.Format("%s",info->szExeFile);//获取当前进程...
首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetCurrentProcess()方法来获取当前程序所对应的进程对象。当有了进程对象后,可以通过进程对象名称来...
childprocess - 跨平台的ruby库来管理子进程
有时候我们需要通过java代码启动多个java子进程。这样做虽然占用了一些系统资源,但会使程序更加稳定,因为新启动的程序是在不同的虚拟机进程中运行的,如果有一个进程发生异常,并不影响其它的子进程。在Java中我们...
NULL 博文链接:https://sghfofo.iteye.com/blog/571105
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
c#利用进程(Process)调用系统应用程序源码,如调用计算机,画画,记事本....等等系统应用程序
node-process, node.js 和浏览器的进程信息 进程require('process'); 与其他模块一样。通过模块提供的browser.js shim 在 node.js 和浏览器中工作。浏览器实现这个 MODULE的目标并非是内置进程 MODULE的完全成熟的...
Python进程Process模块-Python零基础⼊门教程 Python进程Process模块-Python零基础⼊门教程 ⽬录 ⼀.Python 进程 Process 简介 ⼆.Python 进程 Process 模块 三.Python 进程 Process 函数介绍 四.Python 进程 ...
java imageProcess 图像处理程序模板,java imageProcess 图像处理程序模板
是要用到名称空间中的Process 类,本例将枚举windows当前正在运行的所有进程,并把这些进程信息显示在ListView列表中,这些进程信息主要是进程的ID,优先级,专用内存大小,启动时间并填入ListView控件中,程序利用...
C++隐藏进程,C++语言编写驱动级隐藏
pid pid 通常指的是进程 ID(Process ID),是一个用于标识正在运行的进程的唯一整数标识符。每个进程在系统中都有一个唯一的进程 ID,用来区分不同的进程。