0

我遇到过需要从对象描述中找出 Unix 进程 pid 的情况。

例如:-我有一个在 unix 中从创建新进程的 java 代码运行的脚本。

当这是从java代码打印出来时,我得到类似的东西

java.lang.UNIXProcess@87cbde

从上面可以很明显地看出,该对象是指一个 UNIXProcess。

是否可以借助此对象描述在 UNIX 中找到此进程的 PID?

4

1 回答 1

1

是否可以借助此对象描述在 UNIX 中找到此进程的 PID?

简单的答案是否定的。没有办法。

首先,那个“描述符”只是默认实现的输出toString()。它由对象的类名和它的“身份哈希码”组成。它不编码对象的状态。

身份哈希码是一个值,通常根据第一次调用该方法时对象的地址计算得出。然而:

  • 它是一个 32 位(最大值)值,不能在 64 位 JVM 上编码完整的 64 位地址,

  • 该对象可能不再位于计算身份哈希码时的相同地址,并且

  • 您不能在纯 Java 中将机器地址转换为 Java 引用(反之亦然)。(如果你弄错了,即使使用非纯 Java 技巧也可能会给你带来 JVM 稳定性问题。)

但是,如果您有对象的对象引用UnixProcess,则应该可以使用反射在其私有字段中四处寻找并挖掘出 UNIX pid 值。

于 2013-01-23T14:38:19.607 回答