Avisar de contenido inadecuado

Actuación ante procesos conflictivos (ps, kill, renice)

{
}

Hoy veremos que hacer con esos procesos que nos bloquean el sistema al consumir un sin fin de recursos o simplemente, pero no menos molestos, esos procesos bloqueados que se niegan a cerrarse.

Ante una situación así, nuestra primera acción consistirá en identificar al proceso que nos esta dando problemas, para ello no hay nada mejor que el comando ps.

El comando PS

ps nos mostrará los procesos que se están ejecutando en el sistema, tanto los nuestros como los de los demás usuarios.

Este comando tiene multitud de de opciones, aquí solo veremos unas pocas, aunque más que suficientes para conseguir nuestro objetivo. Para ver todas las opciones disponibles teclear en la consola man ps.

  • ps -e (igual que -A): Todos los procesos
  • ps -u : Procesos del usuario
  • ps -l : Indica la prioridad de los procesos
  • ps -AF: Todos los procesos con Info. extra
  • ps -AL: Igual que el anterior pero con otro formato
  • ps -AF --forest: Todos los procesos y dependencias entre ellos en forma de árbol.

Como he dicho antes, hay muchísimas más opciones y combinaciones de ellas, por lo que os vuelvo a remitir al comando man.

Como ejemplo práctico, imaginemos que conocemos el programa que queremos eliminar, por ejemplo el amule, para ello teclearemos lo siguiente.

ps -e|grep amule

Si el programa aMule está en ejecución, nos devolverá algo parecido a esto.

8236 ? 00:00:23 amule

Lo que nos interesa del resultado es la primera columna, el número 8236, este número es el PID del programa. Cada proceso tiene asignado un número, este es único y lo identifica inequívocamente, viene a ser como la matrícula de un vehículo o el número del DNI.

Gracias al PID podremos indicar al sistema sobre que proceso queremos actuar.

Hemos asumido que conocemos el programa sobre el que queremos actuar, pero y si no fuera así, imaginemos que nuestro sistema se ha vuelto extremadamente lento. Queremos saber cual es el programa que nos esta consumiendo los recursos de esta manera. Podemos acudir a cualquiera de las opciones del comando ps que hemos mencionado anteriormente y localizar el programa fijándonos en las columnas CPU y MEM. Con un poco de imaginación podemos obtener ese mismo resultado de una manera más directa.

ps aux|sort -n -k3|tail -1

ps aux nos devuelve un listado de todos los procesos en ejecución, este listado lo pasamos al comando sort que lo ordenará, la opción -n indica que ordenaremos numéricamente y -k3 que ordenaremos de acuerdo a la tercer columna. Nuevamente, ese listado ordenado, lo pasamos al comando tail, que filtra el listado devolviendo únicamente la última fila -1, obteniendo como resultado el proceso que más consumo de CPU tiene.

De una forma o de otra, ahora tenemos identificado el proceso que queremos cerrar, para ello utilizaremos el comando kill, que supongo, ya conocéis, al menos en su forma más básica.

El comando KILL

El comando kill se limita a enviar una señal al proceso indicado y este no tiene por que ser necesariamente para matarlo.

Si no le ponemos ninguna opción, el comando enviará una señal al proceso indicándole que ha de terminar de inmediato. Esta forma de actuar, como ya veremos, no es siempre la más adecuada.

Por ejemplo, podríamos comunicarle al proceso nuestra intención de cerrarlo y que sea el quien de manera ordenada se detenga.

kill -15 8236

Donde 8236 es el PID del programa que queremos finalizar.

La opción -15 envía la señal SIGTERM al programa, permitiéndole parar de manera ordenada.

También podríamos haber usado el nombre de la señal en vez del Número 15, así la siguiente instrucción tiene el mismo efecto que la anterior.

kill SIGTERM 8236

Si conocemos el número que identifica una señal y queremos saber su nombre, disponemos de la opción -l.

kill -l 15

Si solo ponemos la opción -l, nos devolverá una lista de todas las señales disponibles junto con su número.

Si el programa ha ignorado nuestra amable petición para que finalice, podemos obligarlo a cerrarse enviándole la señal SIGKILL, señal que no podrá rechazar, al menos en teoría.

kill -9 PID

Ala, que a gusto nos hemos quedado, aunque no siempre tenemos que ser tan drásticos, imaginaros que el proceso esté ejecutando una tarea que nos interesa, podríamos probar otras soluciones antes de matarlo, como por ejemplo pararlo mediante la señal SIGSTOP, ojo!!!, he dicho pararlo no finalizarlo, el proceso continuará cargado en memoria aunque eso si sin consumir CPU.

kill -19 PID

Y lo podremos reiniciar cuando nos interese enviándole la señal SIGCONT.

kill -18 PID

Otra posible solución podría consistir en bajarle la prioridad al proceso conflictivo. Para los que no tengan muy claro que es eso de la prioridad, os lo intentaré explicar aunque eso si, de una manera muy general y resumida, así que no os lo toméis al pie de la letra.

Tenemos muchos procesos y un una sola CPU, un proceso solo trabaja cuando esta en posesión de la CPU, y cada proceso la obtiene solo durante un tiempo muy limitado, finalizado ese tiempo, la CPU pasa a otro proceso, de esta manera parece que todas las aplicaciones o procesos se ejecutan de forma paralela. Pues bien, la prioridad afecta al tiempo en que cada proceso está en posesión de la CPU, ya que este será más alto cuanta mayor prioridad tenga.

El comando renice

Se emplea para alterar la prioridad de un proceso o un grupo de ellos, si este comando se aplica sobre un usuario, hará que todos sus procesos vean alterada su prioridad.

  • -g: se aplica sobre grupos.
  • -u: se aplica sobre usuarios.
  • -p: se aplica sobre procesos.

Si se omite este argumento, se sobreentiende que la alteración de prioridad se efectuará sobre un proceso.

Solo al usuario root se le permite aumentar la prioridad, el resto de los mortales solo podrán bajarla. El rango de prioridad de un proceso va de -20 a 20, siendo -20 el de máxima prioridad.

Sabiendo esto podemos quitarle prioridad al programa conflictivo de la siguiente manera.

renice +15 8236

Hemos reducido la prioridad del proceso con PID 8236, poniéndola en 15, antes estaba en 0, obteniendo como respuesta algo parecido a esto.

8236: prioridad antigua:0, nueva prioridad 15

Ahora para dejarla como estaba, osea aumentar su prioridad, necesitamos ejecutar como root el siguiente comando.

sudo renice 0 8236

O si queremos que acabe cuanto antes, podemos darle la máxima prioridad posible

sudo renice -20 8236

Bueno por último, daré una alegría a todos aquellos a los que la consola les da urticaria. Os presentaré unas pocas aplicaciones que pueden hacer prácticamente lo mismo que hemos hecho hasta ahora pero de una manera más fácil o mejor dicho, más visual.

El comando ps nos permite ver los procesos en ejecución, pues bien, esto mismo lo podemos obtener con cualquiera de estos programas.

  • top
  • htop
  • gnome-system-monitor

Puede que alguno de ellos los tengáis que instalar.

sudo aptitude install htop

Personalmente me gusta htop, una vez ejecutado, nos mostrará entre otra mucha información la lista de procesos que están en ejecución, de esa lista podemos mediante la tecla F6 ordenar los procesos por la columna que deseemos, o bine mediante la tecla F3 buscarlo y seleccionarlo, luego podemos modificar su prioridad con las teclas F7 y F8 o utilizar las señales del comando kill mediante la tecla F9.

Por último, también tenemos el programa xkill, que nos permitirá seleccionar mediante el cursor la aplicación que queramos cerrar. Al ejecutarlo, veréis que el cursor ha cambiado, ubicarlo sobre la ventana o aplicación que queráis cerrar y pulsar el botón del ratón.

Posiblemente también tengáis que instalarlo, ya sabéis como, ¿no?. luego podéis ejecutarlo pulsando la combinación de teclas ALT+F2 y escribiendo su nombre xkill.

------------

Dicen que si reproduces un CD de Microsoft del revés, se escuchan mensajes satánicos...

-Bah, pues vaya cosa, si lo reproduces del derecho... ¡te instala Windows!

{
}
{
}

Comentarios Actuación ante procesos conflictivos (ps, kill, renice)

¿Qué hace e lcomando
ps -aux? ¿Qué información muestra? ¿Por qué aparece el programa ps en la lista de procesos? GRACIAS
Anónimo Anónimo 28/03/2009 a las 13:46
Jodo con la preguntita, Como ya he dicho, ps muestra los procesos en ejecución y por supuesto el mismo ps es un proceso en ejecución por eso sale.
La información que proporciona el comando ps es diversa (el pid del proceso, consumo de CPU, MEM, etc)
Y por último -aux muestra todos los procesos que hay en el sistema.
MÁS INFORMACIÓN: man ps
Buenas .
Quiero agradecer el articulo muy bueno y bien explicado y gracioso por los comentarios de entre y final sobre el disco de microsoft me ha hecho reír mucho . Espero que sigáis publicando artículos como este para ayudar a novatos como yo que estamos luchando por aprender en este maravilloso mundo de linux
tynu tynu 22/08/2014 a las 10:18

Deja tu comentario Actuación ante procesos conflictivos (ps, kill, renice)

Identifícate en OboLog, o crea tu blog gratis si aún no estás registrado.

Avatar Tu nombre