Mata a los procesos de Java

20

Estoy trabajando en un código computacionalmente pesado que, por ahora, falla mucho, pero todavía estoy trabajando en ello :) Cuando falla, no puedo cerrar la ventana de la GUI; Tengo que abrir un shell y matar -9 el proceso.

Es un proceso de Java y es fácil de encontrar:

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

Ahora es fácil pero una tarea bastante mecánica. Así que normalmente espero que caigan unos 7-8 procesos, y luego kill -9 cada uno de ellos.

Quiero hacer esto de forma automática. Creo que debería ser fácil canalizar algunos comandos para tomar la identificación de los resultados (n-1) de ps aux | grep java y matarlos, pero no tengo idea de dónde comenzar.

¿Alguien puede darme alguna pista?

    
pregunta nkint 11.12.2012 - 11:30

4 respuestas

19

Unos cuantos tubos más te llevarán a donde quieres estar. Así es como lo haría:

search_terms='whatever will help find the specific process' 

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

Esto es lo que está sucediendo:

grep -v 'grep' excluye el proceso grep de los resultados.

awk '{print }' imprime solo la segunda columna de la salida (en este caso, el PID)

$(...) es sustitución de comando. Básicamente, el resultado del comando interno se usará como argumento para kill

Esto tiene el beneficio de un control más preciso sobre lo que se mata. Por ejemplo, si está en un sistema compartido, puede editar los términos de búsqueda para que solo intente matar sus propios procesos de Java.

    
respondido por el Dean 11.12.2012 - 18:49
37

Si desea eliminar todos los procesos que se llaman java , puede usar el siguiente comando:

  

killall -9 java

Este comando envía señales a procesos identificados por su nombre.

    
respondido por el Milan Todorovic 11.12.2012 - 11:59
3

Abra un editor de texto y guarde este breve script bash en su directorio de inicio como 'killjava'

#! /bin/bash

# Kill Java process

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

kill -9 $PID

Luego chmod u+x ~/killjava en una terminal para que pueda ejecutar el archivo.

Luego puedes llamar a ~/killjava desde un terminal y tu proceso de Java estará totalmente muerto. Es posible que desee considerar qué otros recursos se verán afectados por su muerte del proceso de Java de esta manera (como las conexiones de bases de datos). Por ejemplo, quizás kill -15 sería más apropiado; consulte la explicación aquí .

    
respondido por el Clive van Hilten 11.12.2012 - 11:46
2

Aquí hay un enfoque alternativo, basado en la respuesta anterior de @ Dean.

Esto utiliza jps para identificar el proceso de Java.

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

MainClass es una clase en tu programa Java en ejecución que contiene el método principal.

    
respondido por el Pawan 04.10.2016 - 18:27

Lea otras preguntas en las etiquetas