Uccidi i processi Java

20

Sto lavorando su un codice computazionalmente pesante che - per ora - si blocca molto, ma ci sto ancora lavorando :) Quando si blocca, non posso chiudere la finestra della GUI; Devo aprire una shell e kill -9 il processo.

È un processo Java ed è facile da trovare:

[email protected]:~$ ps aux | grep java
nkint   2705 16.6  1.0 460928 43680 ?        Sl   12:23   0:08 /usr/lib/jvm/java-6-sun-1.6.0.26/bin/java -Djava.library.path=something something
nkint   2809  0.0  0.0   4012   776 pts/0    S+   12:24   0:00 grep --color=auto java
[email protected]:~$ kill -9 2705

Ora è facile ma piuttosto un compito meccanico. Quindi normalmente attendo circa 7-8 processi in crash, quindi kill -9 ciascuno di essi.

Voglio farlo in modo automatico. Penso che sia facile convogliare alcuni comandi per prendere l'id dei risultati (n-1) di ps aux | grep java e ucciderlo, ma non ho idea di dove cominciare.

Qualcuno può darmi qualche suggerimento?

    
posta nkint 11.12.2012 - 12:30

4 risposte

19

Altre pipe ti porteranno dove vuoi essere. Ecco come lo farei io:

search_terms='whatever will help find the specific process' 

kill $(ps aux | grep "$search_terms" | grep -v 'grep' | awk '{print }')

Ecco cosa sta succedendo:

grep -v 'grep' esclude il processo grep dai risultati.

awk '{print }' stampa solo la 2 ° colonna dell'output (in questo caso il PID)

$(...) è la sostituzione di comando. Fondamentalmente il risultato del comando interno sarà usato come argomento su kill

Questo ha il vantaggio di un controllo più preciso su ciò che viene ucciso. Ad esempio, se si è su un sistema condiviso, è possibile modificare i termini di ricerca in modo che tenti solo di uccidere i propri processi java.

    
risposta data Dean 11.12.2012 - 19:49
36

Se si desidera eliminare tutti i processi denominati java , è possibile utilizzare il seguente comando:

  

killall -9 java

Questo comando invia segnali ai processi identificati dal loro nome.

    
risposta data Milan Todorovic 11.12.2012 - 12:59
3

Apri un editor di testo e salva questo breve script bash nella tua directory home come "killjava"

#! /bin/bash

# Kill Java process

# Determine the pid
PID='ps -C java -o pid='

kill -9 $PID

Quindi chmod u+x ~/killjava in un terminale in modo da poter eseguire il file.

Quindi puoi chiamare ~/killjava da un terminale e il tuo processo Java sarà morto. Potresti considerare quali altre risorse saranno eliminate dalla tua uccisione del processo Java in questo modo (come le connessioni al database). Ad esempio, forse kill -15 sarebbe più appropriato: consulta la spiegazione qui .

    
risposta data Clive van Hilten 11.12.2012 - 12:46
2

Ecco un approccio alternativo, basato sulla risposta precedente di @ Dean.

Questo utilizza jps per identificare il processo java.

kill $(jps | grep <MainClass> | awk '{print }')

MainClass è una classe del tuo programma java in esecuzione che contiene il metodo principale.

    
risposta data Pawan 04.10.2016 - 20:27

Leggi altre domande sui tag