2012-05-03 13 views
6

Sto usando il metodo java Runtime.exec() per eseguire il file bat, nel file bat ho codice di scrittura che esegue jar.Questo jar contiene una classe thread che raggruppa il tempo infinito della coda rabbitmq, se il messaggio viene trovato esegui un'operazione su quel , significa che il processo sarà infinito. Voglio uccidere questo processo usando il codice java, inoltre voglio sapere che questo metodo è in grado di eseguire lo script su Linux Os.Come chiudere il processo in esecuzione usando java?

**Used java code** 

String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat"; 
Runtime rt = Runtime.getRuntime(); 
Process proc = rt.exec(myCMD); 

**used batch file** 

cd c: 
cd ElasticMgmtService\ 
java -jar ElasticIndexManagementService.jar config\ElasticIndexManagementService.xml 

per favore aiutami a risolvere il problema.

+0

Non è possibile eseguire un file batch su Linux, fornire una versione specifica o riscrivere il lotto in Java! Per eliminare il processo, consulta http://stackoverflow.com/questions/6356340/killing-a-process-using-java –

risposta

2

Runtime.exec (...) restituisce Process oggetto che consiste seguenti metodi

  • destroy()
  • exitValue()
  • getErrorStream()
  • getInputStream()
  • getOutputStream()
  • waitFor()

è possibile chiamare destroy() che uccide il sottoprocesso. Il sottoprocesso rappresentato da questo oggetto Processo viene terminato forzatamente. o si può uccidere passando taskkill /PID <process id> in Runtime.exec(...) o kill -9 <process id>

+0

ho provato il metodo destroy() ma non chiude il prompt dei comandi (processo). String myCMD = "cmd.exe/C start c: \\ elasticmgmtservice.bat"; Runtime rt = Runtime.getRuntime(); Process proc = rt.exec (myCMD); proc.destroy(); –

+0

@sam - ho controllato che 'cmd.exe/C start mspaint.exe' funziona correttamente con destroy(). Di fatti c'è qualche processo che non risponde ai metodi di distruzione. è meglio che chiudi "taskkill" o "kill". –

+0

@ Quoi- quando eseguo il seguente codice con il metodo destroy e 'taskkill' o 'kill' non risponderà, significa che non uccide il processo quando provo ad uccidere manualmente dall'elenco dei processi mostra il processo java.exe quando Io uccido questo processo manualmente e termina con successo. Non ho capito cosa succede, se hai qualche idea per favore dimmelo. –

0

Runtime.exec() restituisce un oggetto Processo, che è un gestore per il processo creato dal metodo exec. Per uccidere questo processo, è necessario chiamare Process.destroy();

2

In Windows

Runtime rt = Runtime.getRuntime(); 
rt.exec("taskkill " +<Your process>); 

In Linux

Runtime rt = Runtime.getRuntime(); 
rt.exec("kill -9 " +<Your process>); 
+0

Questa sembra un'idea terribile. L'utilizzo di Process # destroy() è molto preferibile. – dantiston

Problemi correlati