在Java中获取subprocessID

我以这种方式创buildsubprocess:

String command = new String("some_program"); Process p = Runtime.getRuntime().exec(command); 

我怎样才能得到这个subprocessID?

PS我正在开发Linux。

Solutions Collecting From Web of "在Java中获取subprocessID"

目前还没有公开的API(请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4244896 ),但有解决方法。

第一个解决方法是使用像ps这样的外部程序,并使用Runtime.exec()来调用它来获得pid 🙂

另一个基于java.lang.Process类是抽象的事实,你实际上根据你的平台得到一个具体的子类。 在Linux上,你将得到一个java.lang.UnixProcess ,它有一个私有字段int pid 。 使用反射,你可以很容易地得到这个领域的价值:

 Field f = p.getClass().getDeclaredField("pid"); f.setAccessible(true); System.out.println( f.get( p ) ); 

我试过(而且失败了)。 我最终把我的命令封装在一个shell脚本中,将pid转储到一个文件中。 不是最好的解决方案,但它让我通过这个障碍。

那么没有记录的方法来做到这一点,但是碰巧Process Process类是UNIXProcess,并且它有一个pid字段。 所以你可以使用反射来访问这个私人领域来获得ID。 在你周围搜索会发现调用另一个shell获得ps输出和那种事情的其他技巧。 不容易。

从这里

 public static void main(String[] args) throws IOException { byte[] bo = new byte[100]; String[] cmd = {"bash", "-c", "echo $PPID"}; Process p = Runtime.getRuntime().exec(cmd); p.getInputStream().read(bo); System.out.println(new String(bo)); }