
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 kill
todos 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/pkill
y 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 -A
se 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 sshd
funcionaría (errores tipográficos intencionales, no lo hagas;)
pero killall /usr/sbin/sshd
funcionarí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. Killall
puede 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>