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
risposta
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
È possibile utilizzare pkill:
pkill your_java_program_name
Funzionerebbe se si esegue solo un'istanza del programma in esecuzione.
È 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.
assumendo che il mio nome file java sia test.java e stia eseguendo come trovarlo? – Harish
+1 per avermi introdotto in jps :) – sfussenegger
@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
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 piacecut -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 per ogni' wow 'che ho detto su ogni riga.:) – Nishant
Questo funzionerà anche per le macchine Windows, ma sarà necessario eseguire un po 'di rilevamento dell'ambiente per capire quale 'kill' usare. –
@Odelya Ho appena aggiunto '-r' (' --no-run-if-empty') a 'xargs' per evitare questo errore. – sfussenegger
è 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)}'
Sapendo che nome? Se conosci il nome dell'eseguibile (che normalmente è 'java'),' killall' è tuo amico. – sfussenegger
@sfussenegger: Probabilmente non vuole uccidere tutti i processi java, ma solo uno specifico. – Mnementh
@Mnementh è quello che mi aspetterei anch'io, ma dalle informazioni fornite questa è la cosa migliore che potrei raccomandare. – sfussenegger