2010-09-14 23 views

回答

0

編輯 - 正如Brian指出的那樣,得到的是正在運行的進程的ID,而不是生成的進程的ID。

,我能想到的第一方案,會是這樣的:

ManagementFactory.getRuntimeMXBean().getName(); 

,你會得到這樣的:18306 @本地。 18306是進程ID。

+1

這是正在運行的進程的進程ID,而不是生成的進程。還要注意的是,我不相信上述內容在JVM實現中是完全可靠的(我使用它,但值得注意的是一個警告) – 2010-09-14 11:33:21

1

這將是環境/操作系統特定的。

如果你在Unix上,你可以寫一個腳本來輸出進程ID,然後exec執行您所需的過程。該進程將替換進程表中的腳本並使用相同的進程ID運行。例如

#!/bin/sh 
echo $$ 
exec 'your program here' 

因此,您的父Java進程可以產生這種情況,讀取輸出,第一行是您的進程ID。

+0

+1,這是獲得pid的正確方法 – 2010-09-14 11:53:41

0

有一個API,它允許您查詢從Java進程列表:Sigar。它看起來很商業化,但它實際上是GPL。如果你有關於你產生的進程的一些細節,你可能會掀起一個Sigar查詢來返回你的pid。

這是跨平臺的。