2013-01-23 59 views
0

我遇到了一種情況,我需要從對象描述中找出Unix進程pid。我們可以找到帶有對象引用的Unix Pid嗎?

對於例如: - 我有一個腳本,它是從java代碼創建一個新的進程在Unix中運行。

當這從java代碼打印出來,我得到的東西像

[email protected] 

正是從上述的對象指的一個UNIXProcess相當明顯。

在這個對象描述的幫助下,有可能在UNIX中找到這個進程的PID嗎?

+1

可能的重複[如何找到在java中啓動的進程的進程ID(pid)?](http://stackoverflow.com/questions/5284139/how-do-i-find-the-process- id-p-of-a-process-started-in-java) – assylias

+1

這裏的「對象描述」只是對象的類名和hashCode。 PID不打印出來。 –

+0

另請參閱:http://stackoverflow.com/questions/4750470/know-pid-java-process – assylias

回答

1

是否可以在UNIX中藉助此對象描述找到此進程的PID?

簡單的答案是否定的。沒有辦法。

首先,「描述符」僅僅是默認實現toString()的輸出。它由對象的類名和其「身份哈希碼」組成。它不編碼對象的狀態。

身份哈希碼的值是通常是根據第一次調用該方法時的對象地址計算得出的值。但是:

  • 它是一個32位(最大)值和不能在64位JVM編碼完整的64位地址,

  • 對象可能不再是在相同的地址是當計算出身份哈希碼時,您不能在純Java中將機器地址轉換爲Java引用(或反之亦然)。 (即使使用的非純Java技巧容易給你JVM穩定性的問題,如果你弄錯了。)

但是,如果您對UnixProcess對象的對象引用,它應該是可能的使用反射在其私有字段中查找並挖掘UNIX pid值。

相關問題