2010-01-25 11 views
11

C'è un modo per fermare un programma Java in esecuzione utilizzando uno script di shell conoscendo le alone.I nome sto usando shell kshshell script per fermare un programma Java

+1

Sapendo che nome? Se conosci il nome dell'eseguibile (che normalmente è 'java'),' killall' è tuo amico. – sfussenegger

+0

@sfussenegger: Probabilmente non vuole uccidere tutti i processi java, ma solo uno specifico. – Mnementh

+0

@Mnementh è quello che mi aspetterei anch'io, ma dalle informazioni fornite questa è la cosa migliore che potrei raccomandare. – sfussenegger

risposta

6

Aggiungere una proprietà univoca alla JVM per identificarla facilmente, ad es. per Test.class

java -Duniquename=1 test 

di ucciderlo:

ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill 
+0

Il suo errore di lancio. Sto usando ksh shell – Harish

+0

che errore stai ottenendo? –

+0

Funziona bene con KSH. Forse hai commesso un errore durante la copia del comando. – diciu

1

È possibile utilizzare pkill:

pkill your_java_program_name 

Funzionerebbe se si esegue solo un'istanza del programma in esecuzione.

3

È possibile utilizzare i jps che identificano l'id di processo associato al nome del programma java avviato (jps è un gestore di processi per i programmi java). Con questo id puoi uccidere normalmente il processo.

+0

assumendo che il mio nome file java sia test.java e stia eseguendo come trovarlo? – Harish

+0

+1 per avermi introdotto in jps :) – sfussenegger

+0

@Harish: Dopo averlo compilato ed eseguito, verrà visualizzato come 'test'. Se lo impacchettate in un jar eseguibile (test.jar) ed eseguite tramite 'java -jar test.jar', jps mostra 'test.jar'. – Mnementh

20

seguito su Mnementh' suggestion:

questo dovrebbe fare il lavoro

jps -l | grep org.example.MyMain | cut -d ' ' -f 1 | xargs -rn1 kill 
  • jps -l: lista java professionista terminare con "nome pacchetto completo per la classe principale dell'applicazione o il nome percorso completo del file JAR dell'applicazione".

  • grep: scegli il processo che ti piace

  • cut -d -' ' -f 1: dividere l'output in colonne utilizzando delimitatore '' e stampare solo la prima (il PID)

  • xargs -rn1 kill: eseguire uccidere per ogni PID (se presente)

nota che è necessario eseguire JPS e xargs con lo stesso utente (o root), come si sta eseguendo il processo

+1

+1 per ogni' wow 'che ho detto su ogni riga.:) – Nishant

+1

Questo funzionerà anche per le macchine Windows, ma sarà necessario eseguire un po 'di rilevamento dell'ambiente per capire quale 'kill' usare. –

+0

@Odelya Ho appena aggiunto '-r' (' --no-run-if-empty') a 'xargs' per evitare questo errore. – sfussenegger

1

è possibile utilizzare l'opzione -o di ps per formattare la vostra uscita,

ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}' 
Problemi correlati