Quiero matar todos los procesos que se me presentan:
ps aux | grep my_pattern
¿Cómo hacerlo?
Esto no funciona:
pkill my_pattern
Utilice pkill -f
, que coincide con el patrón de cualquier parte de la línea de comandos
pkill -f my_pattern
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
¿Qué hace este código?
El ps -ef
produce una lista de los id's de proceso en el ordenador visible para este usuario. La tubería grep filtra eso hacia abajo para las filas que contienen esa cadena. El grep -v grep
dice don't match en el proceso mismo haciendo el grepping. La tubería awk print dice que se dividan las filas en el delimitador de espacios en blanco por defecto y se filtre a la segunda columna que es nuestro id de proceso. La tubería xargs crea un nuevo proceso para enviar todos esos pid's a kill -9
, acabando con todos ellos.
**El código de arriba es malo, peligroso, feo y pirata por varias razones.
Si el código que está siendo forzado a terminar está haciendo cualquier operación de base de datos o transacciones seguras con condiciones de carrera de baja probabilidad, alguna fracción de un porcentaje de las veces, la atomicidad de esa transacción será destrozada, produciendo un comportamiento indefinido. kill -9 no toma prisioneros. Si su código es sensible a esto, intente reemplazar la parte xargs kill
con una bandera transmitida que solicite un cierre elegante, y sólo si esa solicitud es denegada, el último recurso es kill -9
.
Hay una posibilidad no nula de que accidentalmente termine el sistema operativo o provoque un comportamiento indefinido en un proceso no relacionado, llevando a la inestabilidad de todo el sistema porque ps -ef
lista todos los procesos posibles que podrían existir, y usted no puede estar seguro de que alguna extraña biblioteca de terceros comparta el nombre de su proceso, o que en el tiempo entre la lectura y la ejecución de kill -9, el processid haya cambiado a otra cosa, y ahora usted haya terminado accidentalmente algún proceso aleatorio que no pretendía.
**Pero, si entiendes los riesgos y los controlas con nombres únicos, y estás bien con algunas transacciones perdidas o corrupción ocasional de datos, entonces el 99.9% de las veces estarás bien. Si hay un problema, reinicie el ordenador, asegúrese de que no hay colisiones de procesos. Es debido a código como este que hace que el script de soporte técnico: "Has probado a reiniciar tu ordenador" sea un meme de nivel 5.
Si necesita más flexibilidad en la selección de los procesos utilice
for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do
kill -9 $KILLPID;
done
Puede utilizar grep -e, etc.