Java 我们能找到带有对象引用的Unix Pid吗?
我遇到了一种情况,需要从对象描述中找出Unix进程pid 例如:- 我有一个脚本,它是从创建新进程的java代码在unix中运行的 当这是从java代码打印出来的时候,我得到Java 我们能找到带有对象引用的Unix Pid吗?,java,unix,object,implicit-conversion,Java,Unix,Object,Implicit Conversion,我遇到了一种情况,需要从对象描述中找出Unix进程pid 例如:- 我有一个脚本,它是从创建新进程的java代码在unix中运行的 当这是从java代码打印出来的时候,我得到 java.lang.UNIXProcess@87cbde 从上面可以明显看出,对象引用的是UNIXProcess 借助此对象描述,是否可以在UNIX中找到此进程的PID 借助此对象描述,是否可以在UNIX中找到此进程的PID 答案很简单:不,没有办法 首先,“描述符”只是toString()的默认实现的输出。它由对象的类
java.lang.UNIXProcess@87cbde
从上面可以明显看出,对象引用的是UNIXProcess
借助此对象描述,是否可以在UNIX中找到此进程的PID
借助此对象描述,是否可以在UNIX中找到此进程的PID
答案很简单:不,没有办法
首先,“描述符”只是toString()
的默认实现的输出。它由对象的类名及其“标识哈希代码”组成。它不编码对象的状态
identity hashcode是一个值,通常是根据第一次调用该方法时对象的地址来计算的。然而:
- 它是32位(最大)值,不能在64位JVM上编码完整的64位地址
- 对象可能不再位于计算标识哈希代码时的地址,并且
- 在纯Java中,不能将机器地址转换为Java引用(反之亦然)。(即使使用非纯Java技巧,如果你弄错了,也会给你带来JVM稳定性问题。)
但是,如果您有
UnixProcess
对象的对象引用,则应该可以使用反射在其私有字段中搜索,并挖掘出UNIX pid值。此处“对象描述”的可能重复项只是对象的类名和哈希代码。PID没有打印出来。另请参见:获取PID可能有点麻烦,但您可以获取更多信息。@MathSquared11235解释了如何获取创建进程的JVM的PID,而不是进程本身的PID。