Mata múltiples procesos por nombre en lugar de pid

Mata múltiples procesos por nombre en lugar de pid

Tengo un trabajo que genera de 2 a 5 copias de un comando en Ubuntu Server 14.04.

Estoy tratando de encontrar la opción más simple (es decir, una única línea de comandos en lugar de un script, si es posible) para killtodos ellos. El verdadero truco es que estoy usandoansibleenviar comandos ad-hoc a través de docenas de servidores, es por eso que llamar a cada proceso lleva mucho tiempo.

Ejemplo:

ps aux | grep bash 
user 1031 0.0 0.0  4444  652 ?      Ss  Aug15 0:00 /bin/sh -c /home/user/start-cacheable.bash
user 1032 0.0 0.1 12400 1432 ?      S   Aug15 0:00 /bin/bash /home/user/start-cacheable.bash
user 1327 0.0 0.3 12744 2254 tty1   S   Aug15 0:00 -bash

Ahora desde aquí, huiría kill 1031 1032. ¿Existe un comando limpio que pueda realizar el trabajo?

Respuesta1

La respuesta de @jjlin podría funcionar.

Pero para explicar el funcionamiento de pgrep/pkilly killall:

Killall buscanombres de procesossólo - esa es la parte que se ve en/proc/<pid>/comm

pgrep/pkill hace lo mismo por defecto, pero también puede buscar una coincidencia en los argumentos (-f), lo que hace que coincida nuevamente/proc/<pid>/cmdline

Básicamente, de forma predeterminada sólo ps -Ase consideran las cadenas que se ven en.

ejemplo:

process name (comm): sshd
full command/arguments (cmdline): /usr/sbin/sshd -f /etc/ssh/sshd_config

ahora - kilall/pkil sshdfuncionaría (errores tipográficos intencionales, no lo hagas;)
pero killall /usr/sbin/sshdfuncionaríaNo trabajoporque la ruta no es parte del nombre del proceso
con el que puede verificar pgrep -lf sshd_config(es decir, pkill -f)

Entonces, aquí hay otras cosas a considerar. Killallpuede coincidir solo en los primeros 15 bytes de un nombre de comando (consulte killall -e), ya sea que se necesiten expresiones regulares o si desea aprovechar grupos de procesos, etc.

nota: los archivos /proc/... están delimitados por nulos, así que tenga cuidado al copiar y pegar

Respuesta2

Puedes usar esto.

ps aux | grep <your keyword> | grep -v grep | awk  '{print $2}' | xargs kill -9

Enumera los procesos coincidentes, filtra el proceso grep en sí, toma el PID y lo pasa para matar -9.

Prueba antes de usar el kill -9

Respuesta3

Intentar

pkill start-cacheable.bash

Respuesta4

Puedes usar

killall <process name>

información relacionada