我遇到过需要从对象描述中找出 Unix 进程 pid 的情况。
例如:-我有一个在 unix 中从创建新进程的 java 代码运行的脚本。
当这是从java代码打印出来时,我得到类似的东西
java.lang.UNIXProcess@87cbde
从上面可以很明显地看出,该对象是指一个 UNIXProcess。
是否可以借助此对象描述在 UNIX 中找到此进程的 PID?
我遇到过需要从对象描述中找出 Unix 进程 pid 的情况。
例如:-我有一个在 unix 中从创建新进程的 java 代码运行的脚本。
当这是从java代码打印出来时,我得到类似的东西
java.lang.UNIXProcess@87cbde
从上面可以很明显地看出,该对象是指一个 UNIXProcess。
是否可以借助此对象描述在 UNIX 中找到此进程的 PID?
是否可以借助此对象描述在 UNIX 中找到此进程的 PID?
简单的答案是否定的。没有办法。
首先,那个“描述符”只是默认实现的输出toString()
。它由对象的类名和它的“身份哈希码”组成。它不编码对象的状态。
身份哈希码是一个值,通常根据第一次调用该方法时对象的地址计算得出。然而:
它是一个 32 位(最大值)值,不能在 64 位 JVM 上编码完整的 64 位地址,
该对象可能不再位于计算身份哈希码时的相同地址,并且
您不能在纯 Java 中将机器地址转换为 Java 引用(反之亦然)。(如果你弄错了,即使使用非纯 Java 技巧也可能会给你带来 JVM 稳定性问题。)
但是,如果您有对象的对象引用UnixProcess
,则应该可以使用反射在其私有字段中四处寻找并挖掘出 UNIX pid 值。