Matando procesos por patrón en Linux.

Kill

Kill

Con regularidad, tan solo en un uso diario de un SO Unix (y en mayor medida en la administración) será necesario matar procesos que por alguna razón se encuentran colgados o simplemente es necesario. Matar un proceso es sencillo, si cuentas con los permisos para hacerlo. Matar 200 suele convertirse en algo más que cansado y estresante, es fastidioso.

Es posible localizar un patrón que nos permita identificar exactamente cuales procesos deben ser aniquilados. Por patrón debemos entender una cadena presente, principalmente, en la llamada al o los comandos que están ejecutando el proceso.

Existen alternativas como killall que nos permiten matar una serie de procesos por nombre pero que como solución, no se ajustaba a mis necesidades, ya que puede colgar todo el sistema al matar procesos sin la debida precaución. Para mi situación, no era viable porque tenía varios procesos con el mismo nombre, pero los que deseaba matar solo representaban una parcialidad. Finalmente lo que conseguiremos es algo como:

for i in `ps -ef | grep ftp | awk '{print $2}'`; do kill -9 $i;  done

Eso, en una sola línea para simplificar; pero si se escribiese en varias, sería:

for i in `ps -ef | grep ftp | awk '{print $2}'`
> do
> kill -9 $i
> done

Pero que iremos desglosando para su mejor entendimiento. Cómo ven, se trata de varios comandos que haciendo uso de pipes se convierten en un super comando.

Desglosemos sus elementos:

ps -ef | grep ftp | awk '{print $2}'

Se trata de la parte medular que nos permite la identificación de los procesos a través del comando ps. Mismo que realiza el filtrado solo para aquellos que contengan el patrón ftp a través de grep. Y que, para fines prácticos, nos conviene únicamente conocer su PID (Process ID), mismo que obtenemos haciendo uso de la herramienta AWK (print $2). Si sólamente ejecutásemos este comando, tendríamos una salida parecida a:

11002
24940
25080
25130

Con la lista de todos los PID. Utilizando la estructura de un ciclo for en bash, podemos tomar cada uno de esos PID que mataremos enviando una señal de SIGKILL o -9, para terminar el proceso.

Claro está que el patrón utilizado en el comando grep puede ser cualquiera que se acomode a nuestras necesidades. El utilizado en el ejemplo me sirvió a la perfección tanto para resolver mi problema como para ejemplificar.

Ay se ven.

Facebook Twitter Email

Entradas relacionadas

  • Sin entradas relacionadas

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *