Introducción
Linux en general es un sistema bastante estable. Ocasionalmente, las cosas salen mal y, a veces, también deseamos modificar el funcionamiento del sistema para que se adapte mejor a nuestras necesidades. En este artículo, veremos brevemente cómo podemos administrar programas o procesos en un sistema Linux.
¿Qué son?
Un programa es una serie de instrucciones que le indican a la computadora qué hacer. Cuando ejecutamos un programa, esas instrucciones se copian en la memoria y se asigna espacio para las variables y otras cosas necesarias para administrar su ejecución.
Esta instancia en ejecución de un programa se llama proceso y son los procesos que administramos.
¿Qué se está ejecutando actualmente?
Linux, como la mayoría de los sistemas operativos modernos, es un sistema operativo multitarea. Esto significa que muchos procesos pueden ejecutarse al mismo tiempo.
Además de los procesos que estamos ejecutando, puede haber otros usuarios en el sistema que también ejecutan cosas y el sistema operativo en sí también generalmente ejecutará varios procesos que utiliza para administrar todo en general.
Si nos gustaría obtener una instantánea de lo que está sucediendo actualmente en el sistema, podemos usar un comando llamado top.
top
A continuación, se muestra una versión simplificada de lo que deberías ver cuando ejecutas este comando.
1 2 3 4 5 6 7 8 9 10 |
user@bash: top Tasks: 174 total, 3 running, 171 sleeping, 0 stopped KiB Mem: 4050604 total, 3114428 used, 936176 free Kib Swap: 2104476 total, 18132 used, 2086344 free PID USER %CPU %MEM COMMAND 6978 cesar 3.0 21.2 firefox 11 root 0.3 0.0 rcu_preempt 6601 cesar 2.0 2.4 kwin ... |
Vamos a desglosarlo:
- Línea 2 – Tasks es solo otro nombre para los procesos. Es típico tener bastantes procesos ejecutándose en tu sistema en un momento dado. La mayoría de ellos serán procesos del sistema. Muchos de ellos normalmente estarán reposando. Esto está bien. Simplemente significa que están esperando hasta que ocurra un evento en particular, sobre el cual actuarán.
Línea 3
Este es un desglose de la memoria de trabajo (RAM). No te preocupes si usa una gran cantidad de tu memoria. Linux mantiene los programas usados recientemente en la memoria para acelerar el rendimiento si se ejecutan nuevamente. Si otro proceso necesita esa memoria, se pueden borrar fácilmente para acomodar esto.
- Línea 4 – Este es un desglose de la memoria virtual en tu sistema. Si usa una gran cantidad de esto, es posible que desees considerar aumentar su tamaño. Para la mayoría de las personas con los sistemas más modernos que tienen gigabytes de RAM, no deberían experimentar ningún problema aquí.
- Líneas 6 – 10 – Finalmente, se incluye una lista de los procesos que requieren más recursos en el sistema (en orden de uso de recursos). Esta lista se actualizará en tiempo real, por lo que es interesante observarla para tener una idea de lo que está sucediendo en tu sistema.
Las dos columnas importantes a considerar son el uso de memoria y CPU. Si cualquiera de estos es alto para un proceso en particular durante un período de tiempo, puede valer la pena investigar por qué esto es así. La columna USER muestra quién es el propietario del proceso y la columna PID identifica la ID de proceso de un proceso, que es un identificador único para ese proceso.
Top te dará una vista en tiempo real del sistema y solo mostrará la cantidad de procesos que caben en la pantalla. Otra opción para ver los procesos se llama ps, que significa procesos.
En su uso normal, te mostrará solo los procesos que se ejecutan en tu terminal actual (que generalmente no es mucho). Si agregamos el argumento aux, mostrará una vista completa del sistema que es un poco más útil.
ps [aux]
Muestra bastante salida, por lo que las personas generalmente usan una tubería para para grep para filtrar solo los datos que buscan. Más adelante veremos un ejemplo de esto.
Eliminar un proceso fallido
No sucede a menudo, pero cuando un programa falla, puede ser bastante molesto. Digamos que tenemos nuestro navegador en funcionamiento y, de repente, se bloquea.
Intentas cerrar la ventana, pero no sucede nada, se ha vuelto completamente insensible. No te preocupes, podemos matar/eliminar fácilmente a Firefox y luego volver a abrirlo. Para comenzar, necesitamos el identificador del proceso.
1 2 3 |
user@bash: ps aux | grep 'firefox' cesar 6978 8.8 23.5 2344096 945452 ? Sl 08:03 49:53 /usr/lib64/firefox/firefox user@bash: |
Es el número al lado del propietario del proceso que es el PID (ID del proceso). Usaremos esto para identificar qué proceso eliminar. Para hacerlo, utilizamos un comando que se llama apropiadamente kill.
kill [signal] <PID>
1 2 3 4 |
user@bash: kill 6978 ps aux | grep 'firefox' cesar 6978 8.8 23.5 2344096 945452 ? Sl 08:03 49:53 /usr/lib64/firefox/firefox user@bash: |
A veces tienes suerte y simplemente ejecutando kill normalmente hará que el proceso se detenga y salgas de el. Cuando haces esto, kill envía la señal predeterminada (1) al proceso que efectivamente le pide al proceso que se cierre.
Siempre intentamos esta opción primero, ya que cerrar es la mejor opción. Sin embargo, a veces esto no funciona. En el ejemplo anterior, volvimos a ejecutar ps y vimos que el proceso todavía se estaba ejecutando.
No te preocupes, podemos ejecutar kill nuevamente, pero esta vez proporcionamos una señal de 9, lo que significa efectivamente, entrar con un mazo y asegurarnos de que el proceso haya desaparecido.
1 2 3 |
user@bash: kill -9 6978 user@bash: ps aux | grep 'firefox' user@bash: |
Truco
Los usuarios normales solo pueden eliminar procesos de los que son propietarios. El usuario root en el sistema puede eliminar cualquier proceso.
Mi escritorio se ha bloqueado
En ocasiones raras, cuando un proceso se bloquea y deja de funcionar, puede bloquear todo el escritorio. Si esto sucede, todavía hay esperanza.
Linux en realidad ejecuta varias consolas virtuales. La mayoría de las veces solo vemos la consola 7, que es la GUI, pero podemos acceder fácilmente a los demás.
Si la GUI se ha bloqueado y tenemos suerte, podemos acceder a otra consola y eliminar el proceso ofensivo desde allí. Para cambiar entre consolas, usa la secuencia de teclado CTRL + ALT + F <Console>. Por lo tanto, CTRL + ALT F2 te llevará a una consola (si todo va bien) donde puedes ejecutar los comandos como se indican arriba para identificar los ID de proceso y eliminarlos.
Luego, CTRL + ALT F7 te llevará de regreso a la GUI para ver si se ha solucionado. El enfoque general es mantener los procesos de eliminación hasta que se solucione el bloqueo.
Normalmente, puedes buscar signos reveladores, como un alto uso de CPU o memoria, y comenzar con esos procesos primero. A veces, este enfoque funciona, a veces no y necesitas reiniciar la computadora. Solo depende de la suerte que tengas.
Trabajos en primer plano y en segundo plano
Probablemente no necesites hacer demasiado con los trabajos (jobs) en primer plano y en segundo plano, pero vale la pena conocerlos solo para esas raras ocasiones.
Cuando ejecutamos un programa normalmente (como hemos estado haciendo hasta ahora) se ejecutan en primer plano. La mayoría de ellos también se completan en una fracción de segundo. Tal vez deseamos comenzar un proceso que tome un poco de tiempo y lo haga felizmente sin intervención de nosotros (por ejemplo, procesar un archivo de texto muy grande o compilar un programa).
Lo que podemos hacer es ejecutar el programa en segundo plano y luego podemos seguir trabajando. Lo demostraremos con un comando llamado sleep. Todo lo que hace sleep es esperar un número determinado de segundos y luego salir. También podemos usar un comando llamado jobs que enumera los trabajos en segundo plano actualmente en ejecución para nosotros.
jobs
1 2 |
user@bash: sleep 5 user@bash: |
Si ejecutas el ejemplo anterior tú mismo, notarás que la terminal espera 5 segundos antes de presentarte un mensaje nuevamente. Ahora, si ejecutamos el mismo comando, pero en su lugar colocamos un signo & al final del comando, le estamos diciendo a la terminal que ejecute este proceso en segundo plano.
1 2 3 4 5 |
user@bash: sleep 5 & [1] 21634 user@bash: user@bash: [1]+ Done sleep 5 |
Esta vez notarás que asigna al proceso un número de trabajo, nos dice cuál es ese número y nos da la respuesta de inmediato. Podemos seguir trabajando mientras el proceso se ejecuta en segundo plano.
Si esperas 5 segundos más o menos y luego presionas Enter, verás un mensaje que te indica que el trabajo se ha completado.
También podemos mover trabajos entre el primer plano y segundo plano. Si presionas CTRL + z, el proceso de primer plano actualmente en ejecución se pausará y pasará a segundo plano. Entonces podemos usar un programa llamado fg que significa primer plano para traer procesos en segundo plano al primer plano.
fg <job number>
1 2 3 4 5 6 7 8 9 10 |
user@bash: sleep 15 & [1] 21637 user@bash: sleep 10 (you press CTRL + z, notice the prompt comes back.) user@bash: jobs [1]- Running sleep 15 & [2]+ Stopped sleep 10 user@bash: fg 2 [1] Done sleep 15 user@bash: |
Truco
CTRL + z se usa en Windows, pero con el propósito de ejecutar el comando deshacer. No es raro que las personas que vienen del mundo de Windows presionen accidentalmente el combo de teclas (especialmente en el editor VI, por ejemplo) y se pregunten por qué su programa desapareció y regresó el mensaje.
Si haces esto, no te preocupes, puedes usar jobs para identificar a qué trabajo se le ha asignado y luego fg para recuperarlo y continuar trabajando.
Resumen
Lo que aprendimos
top
Ver datos en tiempo real sobre los procesos que se ejecutan en el sistema.
PD
Obtener una lista de los procesos que se ejecutan en el sistema.
kill
Terminar la ejecución de un proceso.
jobs
Muestra una lista de trabajos actuales que se ejecutan en segundo plano.
fg
Mueve un proceso en segundo plano al primer plano.
Ctrl + Z
Pausa el proceso actual en primer plano y lo mueve a segundo plano.
Conceptos importantes
Control
Tenemos bastante control sobre la ejecución de nuestros programas.
Practicando lo aprendido
Tiempo para divertirse:
- En primer lugar, inicia algunos programas en tu escritorio. Luego usa ps para identificar sus PID y eliminarlos
- Ahora observa si puedes hacer lo mismo, pero primero cambia a otra consola virtual.
- Finalmente, juega con el comando sleep y los procesos de movimiento entre el primer plano y el segundo plano.