GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo matar todos los procesos con un nombre parcial dado?

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:

  1. 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.

  2. 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 a kill -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

Linux
  1. ¿Qué son los procesos zombis y cómo encontrar y eliminar procesos zombis?

  2. ¿Cómo puedo matar un proceso por nombre en lugar de PID?

  3. ¿Cómo encontrar todos los procesos secundarios?

  4. ¿Cómo eliminar un proceso secundario después de un tiempo de espera determinado en Bash?

  5. Cómo eliminar todos los procesos devueltos por pgrep

Cómo matar un proceso en Linux

Cómo matar procesos Zombie en Linux

Cómo localizar y matar un proceso con terminal Linux

Cómo matar procesos Zombie en Ubuntu 20.04 LTS

Cómo matar procesos Zombie en Ubuntu

Cómo matar procesos en Linux usando kill, killall y pkill