Si necesita más flexibilidad en la selección de los procesos, use
for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do
kill -9 $KILLPID;
done
Puede usar grep -e, etc.
Eliminar todos los procesos que coincidan con la cadena "myProcessName":
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
Fuente:http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9
Por qué "ps pipe kill" desde la terminal es malo:
La tubería de números enteros que extrajiste de ps -ef
a kill -9
es malo, y debería sentirse mal, doblemente si es root o un usuario con privilegios elevados, porque no le da a su proceso la oportunidad de cerrar limpiamente las conexiones de socket, limpiar archivos temporales, informar a sus hijos que va a desaparecer o restablecer sus características de terminal.
En su lugar, envíe 15 y espere uno o dos segundos, y si eso no funciona, envíe 2, y si eso no funciona, envíe 1. Si eso no funciona, QUITE EL BINARIO porque el programa se comporta mal.
Como principio general, no usamos Unix Railgun para recortar los setos. https://porkmail.org/era/unix/award.html#kill
Explicación del comando anterior:
ps -ef
produce una lista de ID de proceso en la computadora visible para este usuario. El pipe grep filtra eso para las filas que contienen esa cadena. El grep -v grep
dice que no coincide con el proceso en sí mismo haciendo el grepping. La impresión de tubería awk dice dividir las filas en el espacio en blanco del delimitador predeterminado y filtrar a la segunda columna, que es nuestra identificación de proceso. La tubería xargs activa un nuevo proceso para enviar todos esos pid a kill -9
, acabando con todos.
Por qué ps pipe kill
es malo, peligroso, feo y hacker:
-
Existe una pequeña posibilidad de que accidentalmente finalice el sistema operativo o provoque un comportamiento indefinido en un proceso no relacionado, lo que provocará una inestabilidad en todo el sistema porque
ps -ef
enumera miles de procesos, y no puede estar seguro de que algún proceso de terceros comparta su nombre de proceso, o que en el tiempo entre la lectura y la ejecución kill -9, el id del proceso haya cambiado a otra cosa, y ahora ha terminado algunos procesos aleatorios proceso necesario no relacionado con el suyo. -
Si el código que se está forzando a terminar está realizando operaciones de base de datos o transacciones seguras con condiciones de carrera de baja probabilidad, una fracción de un porcentaje del tiempo, la atomicidad de esa transacción se arruinará, produciendo un comportamiento indefinido. kill -9 no toma prisioneros. Si su código es sensible a esto, intente reemplazar el
xargs kill
parte con un indicador transmitido que solicita un apagado correcto, y solo si se deniega esa solicitud, último recurso akill -9
Pero, Si comprende todos los riesgos y los controla con nombres únicos, y está de acuerdo con algunas transacciones descartadas o corrupción ocasional, entonces el 99.9% del tiempo estará bien. Si hay un problema, reinicie la computadora, asegúrese de que no haya colisiones de procesos. Es debido a un código como este que hace que el script de soporte técnico:"¿Ha intentado reiniciar su computadora?" un meme de nivel 5. "Un robot pícaro raspó ps
para encontrar números enteros y enviarlos a kill -9
, así que reinicie la computadora para solucionar el problema.
¿Por qué no usar simplemente pkill
? ¿Cuál es más fácil?
Lo anterior me da control manual porque ps
, grep
, awk
, kill
y xargs
son estándar multiplataforma. Brinda control total sobre qué motor de expresiones regulares usar, qué parte del nombre del proceso hacer coincidir, manejar la distinción entre mayúsculas y minúsculas y la administración de excepciones.
pkill -f -e -c myProcessName
Hace lo mismo para mí, pero mira man pkill
tiene diferentes comportamientos, indicadores y motores de expresiones regulares entre las variantes de Linux, Mac, Zune-Bash y mi enrutador de código abierto. Entonces, sí, ponga su Unix-Railgun de 35000 vatios en las manos capaces de pkill para podar los setos. Mira lo que sucede.
Usa pkill -f
, que coincide con el patrón de cualquier parte de la línea de comando
pkill -f my_pattern
En caso de que no funcione, intenta usar este también:
pkill -9 -f my_pattern