2010-02-23 70 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. 如果其他进程也是你自己的(你的代码),你可以让它独占一个文件锁;尝试从其他代码锁定它,如果它成功,其他进程没有运行。
相关问题