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 procesosps -u: Procesos del usuariops -l: Indica la prioridad de los procesosps -AF: Todos los procesos con Info. extraps -AL: Igual que el anterior pero con otro formatops -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 sobre 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
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