2010-02-23 103 views
9

那麼標題幾乎總結了這個問題。我發現的唯一的事情是this 但我不知道如果這是要走的路。如何通過Java檢測某個特定進程是否在Windows下運行?

+5

不明確的問題。你想知道Windows進程是否是一個Java應用程序,或者你想知道一個Java應用程序可以判斷它是否在Windows上運行? –

+2

你有什麼合作?進程ID?可執行文件的名稱?你是否開始這個過程?你是否在等待看看它是否完成?基本上你爲什麼要檢查它是否在運行。根據情況有不同的技術。 –

+2

@Stephen C你完全正確,我還不夠清楚!我想知道如何以編程方式查看是否例如notepad.exe正在運行,或者如果firefox.exe正在運行等...希望清除它:) – gmunk

回答

12

可以使用WMIC實用程序,檢查正在運行的進程的列表。
假設你要檢查Windows的Explorer.exe進程正在運行:

String line; 
try { 
    Process proc = Runtime.getRuntime().exec("wmic.exe"); 
    BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
    OutputStreamWriter oStream = new OutputStreamWriter(proc.getOutputStream()); 
    oStream .write("process where name='explorer.exe'"); 
    oStream .flush(); 
    oStream .close(); 
    while ((line = input.readLine()) != null) { 
     System.out.println(line); 
    } 
    input.close(); 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

的,你可以從WMIC得到什麼一些示例見http://ss64.com/nt/wmic.htmlhttp://support.microsoft.com/servicedesks/webcasts/wc072402/listofsampleusage.asp ...

+0

感謝你,因爲我在我的評論早說我沒有足夠清楚。 :) – gmunk

+0

是否有可能然後解決如何從窗口句柄ID殺死正在運行的進程? – JamesC

+0

感謝您的好例子。有沒有辦法獨立處理這個問題的平臺?我需要Linux和Apple的這個功能。 – Socrates

2

os.name應該這樣做。更多信息here

2

取決於你需要知道它!

大多數信息都可以從默認的運行時屬性派生而來,而不需要實際檢查操作系統屬性。

看一看什麼http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties()規定:

java.version Java Runtime Environment version 
java.vendor Java Runtime Environment vendor 
java.vendor.url Java vendor URL 
java.home Java installation directory 
java.vm.specification.version Java Virtual Machine specification version 
java.vm.specification.vendor Java Virtual Machine specification vendor 
java.vm.specification.name Java Virtual Machine specification name 
java.vm.version Java Virtual Machine implementation version 
java.vm.vendor Java Virtual Machine implementation vendor 
java.vm.name Java Virtual Machine implementation name 
java.specification.version Java Runtime Environment specification version 
java.specification.vendor Java Runtime Environment specification vendor 
java.specification.name Java Runtime Environment specification name 
java.class.version Java class format version number 
java.class.path Java class path 
java.library.path List of paths to search when loading libraries 
java.io.tmpdir Default temp file path 
java.compiler Name of JIT compiler to use 
java.ext.dirs Path of extension directory or directories 
os.name Operating system name 
os.arch Operating system architecture 
os.version Operating system version 
file.separator File separator ("/" on UNIX) 
path.separator Path separator (":" on UNIX) 
line.separator Line separator ("\n" on UNIX) 
user.name User's account name 
user.home User's home directory 
user.dir User's current working directory 
0

您正在試圖確定,如果你創建了一個進程仍在運行?

  1. 如果你有PID你發佈的鏈接將做。
  2. 如果其他進程也是你自己的(你的代碼),你可以讓它獨佔一個文件鎖;嘗試從其他代碼鎖定它,如果它成功,其他進程沒有運行。
相關問題