首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java程序如何获取自己的进程ID?

Java程序如何获取自己的进程ID?
EN

Stack Overflow用户
提问于 2008-08-30 17:53:25
回答 16查看 307.7K关注 0票数 383

如何获取Java进程的id?

我知道有几种依赖于平台的黑客攻击,但我更喜欢更通用的解决方案。

EN

回答 16

Stack Overflow用户

发布于 2010-06-29 02:09:17

试试Sigar。非常广泛的API。Apache 2许可证。

代码语言:javascript
复制
private Sigar sigar;

public synchronized Sigar getSigar() {
    if (sigar == null) {
        sigar = new Sigar();
    }
    return sigar;
}

public synchronized void forceRelease() {
    if (sigar != null) {
        sigar.close();
        sigar = null;
    }
}

public long getPid() {
    return getSigar().getPid();
}
票数 36
EN

Stack Overflow用户

发布于 2011-10-08 00:32:53

下面的方法尝试从java.lang.management.ManagementFactory中提取PID

代码语言:javascript
复制
private static String getProcessId(final String fallback) {
    // Note: may fail in some JVM implementations
    // therefore fallback has to be provided

    // something like '<pid>@<hostname>', at least in SUN / Oracle JVMs
    final String jvmName = ManagementFactory.getRuntimeMXBean().getName();
    final int index = jvmName.indexOf('@');

    if (index < 1) {
        // part before '@' empty (index = 0) / '@' not found (index = -1)
        return fallback;
    }

    try {
        return Long.toString(Long.parseLong(jvmName.substring(0, index)));
    } catch (NumberFormatException e) {
        // ignore
    }
    return fallback;
}

例如,只要调用getProcessId("<PID>")即可。

票数 28
EN

Stack Overflow用户

发布于 2011-06-16 20:56:19

对于较旧的JVM,在linux中...

代码语言:javascript
复制
private static String getPid() throws IOException {
    byte[] bo = new byte[256];
    InputStream is = new FileInputStream("/proc/self/stat");
    is.read(bo);
    for (int i = 0; i < bo.length; i++) {
        if ((bo[i] < '0') || (bo[i] > '9')) {
            return new String(bo, 0, i);
        }
    }
    return "-1";
}
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档