首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在java程序中获取刚启动的进程的PID?

如何在java程序中获取刚启动的进程的PID?
EN

Stack Overflow用户
提问于 2011-01-21 01:30:41
回答 14查看 125.7K关注 0票数 81

我使用以下代码启动了一个进程

 ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "path");
 try {
     Process p = pb.start();       
 } 
 catch (IOException ex) {}

现在我需要知道我刚刚启动的进程的pid。

EN

回答 14

Stack Overflow用户

发布于 2011-01-21 01:48:11

目前还没有这方面的公共API。请参阅Sun Bug 4244896,Sun Bug 4250622

作为一种解决方法:

Runtime.exec(...)

类型的对象

java.lang.Process

Process类是抽象的,您得到的是为您的操作系统设计的Process的某个子类。例如,在Mac上,它返回有一个名为pid的私有字段的java.lang.UnixProcess。使用反射,您可以很容易地获得此字段的值。诚然,这是一种黑客行为,但它可能会有所帮助。你需要PID做什么呢?

票数 30
EN

Stack Overflow用户

发布于 2011-04-07 17:32:24

此页面包含如何操作:

http://www.golesny.de/p/code/javagetpid

在Windows上:

Runtime.exec(..)

返回“java.lang.Win32Process”或"java.lang.ProcessImpl“的实例

两者都有一个私有字段“句柄”。

这是进程的操作系统句柄。您必须使用此+ Win32接口来查询PID。该页面有关于如何做到这一点的详细信息。

票数 24
EN

Stack Overflow用户

发布于 2015-10-16 21:33:33

在Unix系统中(Linux和Mac)

 public static synchronized long getPidOfProcess(Process p) {
    long pid = -1;

    try {
      if (p.getClass().getName().equals("java.lang.UNIXProcess")) {
        Field f = p.getClass().getDeclaredField("pid");
        f.setAccessible(true);
        pid = f.getLong(p);
        f.setAccessible(false);
      }
    } catch (Exception e) {
      pid = -1;
    }
    return pid;
  }
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4750470

复制
相关文章

相似问题

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