【问题标题】:Can we find the Unix Pid with the object reference?我们能找到带有对象引用的 Unix Pid 吗?
【发布时间】:2013-01-23 14:16:27
【问题描述】:

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

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

当从 java 代码中打印出来时,我会得到类似

java.lang.UNIXProcess@87cbde

从上面可以很明显地看出,该对象正在引用一个 UNIXProcess。

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

【问题讨论】:

标签: java unix object implicit-conversion


【解决方案1】:

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

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

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

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

  • 这是一个 32 位(最大值)值,无法在 64 位 JVM 上编码完整的 64 位地址,

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多