Blog
En esta oportunidad queremos explicarte que son los procesos en Linux y Bash.
Una instancia de un programa se llama proceso. En términos simples, cualquier comando que le des a tu máquina Linux inicia un nuevo proceso. Una aplicación en tu sistema, un script Bash, o incluso un simple comando ls crea un nuevo proceso. Varios procesos pueden ejecutarse al mismo tiempo. Existen dos tipos de procesos:
- Procesos en segundo plano_: Se ejecutan en la pantalla y requieren la intervención del usuario (Office, su navegador web, aplicaciones de edición de fotos/vídeos, etc.).
- Procesos en segundo plano_: Se ejecutan en segundo plano y, por lo general, no requieren la intervención del usuario (Antivirus, programa Python de web scraping, etc.).
Ejecución del proceso
En primer plano
Para lanzar un proceso en primer plano, puedes ejecutarlo desde el cuadro de mandos o desde el terminal.
Si utilizas el terminal, tendrás que esperar a que finalice el proceso en primer plano.
En segundo plano
Si inicias un programa/proceso en primer plano desde el terminal, no podrás trabajar en el terminal hasta que el programa haya finalizado.
Determinadas tareas con gran cantidad de datos requieren mucha potencia de procesamiento y pueden tardar incluso horas. No querrás que tu terminal esté bloqueada durante ese tiempo.
Para evitar esta situación, puedes ejecutar el programa y enviarlo en segundo plano para que el terminal siga estando disponible para ti.
Veamos cómo.
Preparando la escena
Imaginemos que el siguiente script Python se utiliza para webscraping. Cada segundo, recupera datos y los escribe en el archivo data.txt.
python import time i = 0 while i < (60 * 20): file = open("data.txt", "a") file.write(str(i) + "\n") file.close() i += 1 time.sleep(1)
Copia este script en un archivo `webscraping.py` y ejecútalo.
shell python3 webscraping.py
Acaba de lanzar su script en primer plano. El problema es que el script se ejecutará durante 20 minutos. Nos gustaría tener algún control sobre nuestro terminal durante este tiempo. Para lograrlo, hay varios comandos disponibles para interactuar con nuestro proceso.
Para cada comando que vamos a ver, tómate un momento para observar las últimas líneas del fichero `data.txt` (por ejemplo `tail -3 data.txt`).
Pausa
En primer lugar, para recuperar el control de nuestro terminal, necesitamos pausar nuestro proceso.
Para pausar un proceso que se está ejecutando en primer plano, simplemente pulsa las teclas `Ctrl+z` de tu teclado.
shell [1]+ Stopped python3 webscraping.py
Debería aparecer la línea anterior (observa el contenido de _data.txt_).
Configuración de primer plano
Es posible que queramos traer un proceso al primer plano, para ello puedes utilizar el comando `fg`. Ejecuta el comando para ver si funciona correctamente, y vuelva a pausarlo.
Fondo
Como probablemente has adivinado, el comando background es `bg`. Esto mantendrá el proceso en ejecución, dejando la terminal en tus manos.
shell [1]+ python3 webscraping.py &
Debería aparecer la línea anterior. Podemos ver el carácter `&` siguiendo nuestro comando de ejecución. Para generalizar, si queremos ejecutar un script directamente en segundo plano, todo lo que tenemos que hacer es añadir `&` a nuestro comando.
Herramientas adicionales
Existen varios comandos para obtener información sobre los procesos en curso:
- Htop
Esta utilidad informa al usuario de todos los procesos que se están ejecutando en la máquina Linux.
Ejecutea el comando `htop`, y una gran cantidad de información se mostrará delante de ti. Así es. Hay montones de procesos ejecutándose en tu sistema que ni siquiera sabes que están ahí. Explora la herramienta para encontrar nuestro proceso, que seguramente debe estar ejecutándose mediante el comando `man`.
Pulsa `q` en tu teclado para salir de la pantalla de procesos de htop.
- PS
Este comando significa “Estado del proceso”.
Este comando es similar al comando `htop`, pero la información mostrada es diferente. Para comprobar todos los procesos que se ejecutan bajo un usuario, utiliza el comando `ps ux`.
Esto facilita ver la información sobre los procesos que has iniciado tú mismo.
- PID
Con las herramientas anteriores, una de las informaciones relativas a nuestro proceso es el PID (Process ID). Este identificador nos permite interactuar directamente con el proceso. Por ejemplo, podemos realizar un `ps PID` para obtener sólo la información del proceso en cuestión, o podemos decidir terminar el proceso.
Para encontrar fácilmente el PID de un proceso, puedes utilizar el comando `pidof Process_Name`.En nuestro ejemplo: `pidof python3 webscraping.py`
-
Terminar proceso: Kill
El comando `kill` finaliza los procesos en ejecución en una máquina Linux.
Para usarlo, necesitas conocer el PID (identificador de proceso) del proceso que quieres matar y ejecutar el comando `kill PID`.