Uccidi i processi Java


25

Sto lavorando a un codice pesantemente computazionale che - per ora - si blocca molto, ma ci sto ancora lavorando :) Quando si blocca, non riesco a chiudere la finestra della GUI; Devo aprire una shell e uccidere -9 il processo.

È un processo Java ed è facile da trovare:

nkint@zefiro:~$ 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
nkint@zefiro:~$ kill -9 2705

Ora è facile ma piuttosto un compito meccanico. Quindi normalmente aspetto che si verifichino arresti anomali di circa 7-8 processi, quindi kill -9ciascuno di essi.

Voglio farlo in modo automatico. Penso che dovrebbe essere facile eseguire il pipe di alcuni comandi per prendere l'id dei (n-1) risultati ps aux | grep javae ucciderlo, ma non ho idea da dove cominciare.

Qualcuno può darmi qualche suggerimento?

Risposte:


22

Qualche altra pipa ti porterà dove vuoi essere. Ecco come lo farei:

search_terms='whatever will help find the specific process' 

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

Ecco cosa sta succedendo:

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

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

$(...)è la sostituzione di comando. Fondamentalmente il risultato del comando interno verrà usato come argomento perkill

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


49

Se vuoi uccidere tutti i processi che sono nominati javapuoi usare il seguente comando:

killall -9 java

Questo comando invia segnali ai processi identificati dal loro nome.


killall javanon funzionava per me per qualche motivo casuale che non ero in grado di risolvere. Il -9parametro se ne è occupato. Grazie.
Paul Nelson Baker,

5
9 è SIGKILL. Il programma non può ignorarlo, e in pratica dice: terminati adesso.
Milan Todorovic,

Gli utenti di IntelliJ potrebbero scoprire che il loro IDE è andato in crash per non parlare di Tomcat e di molte altre app. Questo è un modo bruto e sconsigliato su qualsiasi sistema su cui si basano servizi o app di produttività java.
venerdì

3

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

#! /bin/bash

# Kill Java process

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

kill -9 $PID

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

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


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 $1}')

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.