2010-02-23 17 views
9

Beh, il titolo riassume molto la domanda. L'unica cosa che ho trovato è this ma non sono sicuro se questa sia la strada da percorrere.Come rilevare tramite Java se un particolare processo è in esecuzione in Windows?

+5

domanda ambigua. Vuoi capire se il processo di Windows è un'app java o vuoi capire come può essere un'app Java se è in esecuzione su Windows? –

+2

Con cosa devi lavorare? Un ID di processo? Il nome dell'eseguibile? Hai avviato il processo? Stai aspettando di vedere se è finito ancora? Fondamentalmente perché vuoi verificare se è in esecuzione. Esistono diverse tecniche a seconda della situazione. –

+2

@Stephen C hai perfettamente ragione, non ero abbastanza chiaro! Voglio sapere come visualizzare a livello di programmazione se per esempio notepad.exe è in esecuzione o se firefox.exe è in esecuzione, ecc ... spero che lo risolva :) – gmunk

risposta

12

È possibile utilizzare l'utilità wmic controllare la lista dei processi in esecuzione.
si supponga di voler verificare se il processo explorer.exe delle finestre è in esecuzione:

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(); 
} 

Vedi http://ss64.com/nt/wmic.html o http://support.microsoft.com/servicedesks/webcasts/wc072402/listofsampleusage.asp per qualche esempio di cosa si può ottenere da wmic ...

+0

Grazie per quello, come ho detto nel mio commento all'inizio non ero abbastanza chiaro. :) – gmunk

+0

E 'possibile quindi capire come uccidere un processo in esecuzione dall'ID di handle di Windows? – JamesC

+0

Grazie per il bell'esempio. Esiste comunque un modo per gestire la piattaforma di questo problema in modo indipendente? Ho bisogno di questa funzionalità anche con Linux e Apple. – Socrates

2

os.name dovrebbe farlo. Maggiori informazioni here

2

Dipende da ciò che è necessario sapere per!

La maggior parte delle informazioni può essere derivata dalle proprietà di runtime predefinite, senza verificare effettivamente le proprietà del sistema operativo.

Date un'occhiata a ciò che http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties() dispone:

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

Si sta cercando di determinare se un processo è stato creato è ancora in esecuzione?

  1. Se disponi del PID, il link che hai postato lo farà.
  2. Se l'altro processo è anche il tuo (il tuo codice), puoi farlo ottenere un blocco esclusivo su un file; prova a bloccarlo dall'altro codice se riesce l'altro processo non è in esecuzione.
Problemi correlati