Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们能找到带有对象引用的Unix Pid吗?_Java_Unix_Object_Implicit Conversion - Fatal编程技术网

Java 我们能找到带有对象引用的Unix Pid吗?

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()的默认实现的输出。它由对象的类

我遇到了一种情况,需要从对象描述中找出Unix进程pid

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

当这是从java代码打印出来的时候,我得到

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。