Genocidio de procesos con Expresiones Regulares

Publicado el Martes, 7 de diciembre de 2010

Terminal

Mi memoria RAM está dando para poco. Sabiendo que tengo ArchLinux, debería tener bastante controlado el uso de recursos de la computadora, pero últimamente no es así. ¿Será KDE? ¿Serán los drivers de la tarjeta de video? En fin...

Investigando un poco con el comando top, pude detectar un uso abusivo de memoria de un proceso denominado akonadi_ical_re. Instalé KOrganizer hace un tiempo para intentar organizar mi tiempo a través de esta aplicación (cosa que no logré hacer :P) pero acabo de desintalarlo. Supuse que por ahí venía el tema.

Los procesos estaban ahí, comiendo memoria... 24 procesos consumiendo memoria, y sin buscar más, decidí matarlos. Este es el script bruto que usé:

[root@hoth fernando] ps -ef | grep akonadi | awk '//{system(" kill -9 " $2 " ")}'

En la primer parte, uso ps para reportar los procesos que se están ejecutando, hago un pipe a grep que filtra los resultados que contengan "akonadi". Por último desde awk filtro el segundo parámetro (al no especificar el separador, el espacio es el separador por defecto) que en ps -ef es el ID del proceso y ejecuto el comando kill -9 con system para cada proceso que encuentre.

Ya de paso me sirve de referencia para otro momento que necesite usar scripting bash + awk, que hace tiempo no tenía la oportunidad de usar.  Más info al respecto en: Matando procesos con expresiones regulares.

16 comentarios en este post

Feed de comentarios
    • Avatar

      Fernando 7 diciembre. 2010 - 23:32

      Sí, intenté con “killall akonadi_ical_re” pero no los encontraba…. Con un “ps -e” no encontraba los procesos de akonadi, solo con “ps -ef”, creo que con -ef se muestra más información.

      En verdad debería tomarme el tiempo de configurar akonadi correctamente para que no pase esto, pero así fue más divertido 😛

  1. Avatar

    Eduardo 8 diciembre. 2010 - 13:32

    No me gusta mucho awk, quizás porque nunca me he metido con él. Yo lo haría así:

    ps -eo pid,args | sed -n 's/ *([0-9]+) .*akonadi.*/1/p' | xargs kill -kill

    Si usas awk:

    ps -eo pid,args | awk '/akonadi/{ print $1 }' | xargs kill -kill

    PD: Me encanta el título.
    Eduardo.

  2. Avatar

    Alejandro Segovia 8 diciembre. 2010 - 16:41

    Fernando,

    En Fedora tenés un comando “pgrep” que te matchea un string con una lista de pids que luego podés pasarle a “kill”.

    En Arch no debe ser difícil hacerse un alias que implemente “pgrep”.

    Varrojo.-

      • Avatar

        Yefb 10 enero. 2011 - 17:36

        Entonces no era Korganizer el te estaba matando equipo?

        Porque yo pienso usar toda la “KDE PIM”, pero no me decido porque todavia no me convence del todo Kontact.

        Saludos!

        • Avatar

          Fernando 10 enero. 2011 - 23:50

          Aparentemente no, no era la raíz del problema. Parece que 2GB de Ram no son suficientes para una computadora de 64 bits cuando se tienen en ejecución varios navegadores web (con muchas pestañas abiertas), Thunderbird, Kopete, cliente de microblogging, gestor de descarga (KTorrent y/o JDownloader), y ni hablar si ejecuto Eclipse o alguna herramienta del estilo para desarrollar…

          De todas formas te comento que KDE Pim está siendo reescrito, y promete una versión mejorada. Habrá que esperar, ya que se atrasó su salida y no lo vamos a ver con KDE 4.6 este 26 de enero, pero sí seguramente ya con KDE 4.6.1 más adelante.

  1. Renombrar varios archivos desde la línea de comando | Picando Código | 12 enero. 2011 - 08:53

    […] Genocidio de procesos con expresiones regulares […]

Dejar un comentario

Toasty!