La ejecución de procesos es vital en cualquier sistema operativo usado ya que éstos se encargan de que tanto las aplicaciones como otros elementos del sistema operativo puedan actuar de la forma correcta tanto en compatibilidad como ejecución de sus funciones.
Cada sistema operativo puede manejar los procesos de forma diferente, pero en el caso de Linux, por regla general, los procesos están asociado con un terminal. Esto significa que esta debe estar abierta para que el proceso pueda trabajar de forma normal pero esta acción puede dar lugar situaciones como:
- La terminal abierta puede contener muchos datos de salida o mensajes de error / diagnóstico lo cual dificulta no solo la lectura de los datos sino la gestión de ellos.
- Si llegásemos a cerrar la terminal, el proceso junto con sus procesos secundarios finalizará afectando directamente la tarea a realizar.
En este tipo de escenario es fundamental ejecutar los procesos necesarios en segundo plano, un proceso en segundo plano es el proceso que se ejecutará de forma oculta y para su funcionamiento no se requiere la intervención del usuario, de este modo, aunque se cierra la terminal principal, el proceso seguirá ejecutando su tarea. Los procesos de segundo plano aplican para aquellas tareas que pueden tomar tiempo, como scripts, archivos de descarga y demás, donde no podemos esperar a que se complete la acción sin hacer nada.
En linux podemos ejecutar procesos en primer plano (foreground) o bien en segundo plano (background). Un programa en foreground cuando se ejecuta en la terminal, no podremos ejecutar ningún otro comando hasta que termine el proceso, pero puede hacerse desde background o segundo plano.
Un programa que se ejecuta en background una vez iniciado, no utiliza la terminal desde que se ejecutó hasta que termina. Para ejecutar un software o comando en segundo plano desde la terminal añadimos Si añadimos un ampersand (&) al final del comando o del scriptque queremos ejecutar, éste sera ejecutado en segundo plano por el sistema operativo. Ejemplo:
nano &Solvetic explicará cómo podemos ver y ejecutar procesos en segundo plano en Linux.
1. Ver listado de procesos con comando ps en Linux
Con el comando el comando ps, podemos conocer el estado de un proceso ps es process status o estado del proceso. El comando ps, no da un listado de los procesos y especifica algunas columna PID, TTY, TIME, y CMD.
Por ejemplo, con el comando ps -A nos mostrará todos los procesos ejecutándose.
2. Iniciar un proceso o un comando en segundo plano en Linux usando bg en Linux
El comando bg se ha desarrollado como un comando de control de trabajos el cual reanuda los trabajos suspendidos, pero los ejecuta en segundo plano.
La sintaxis básica de este comando es la siguiente:
bg [trabajo]
En caso de que ya se esté ejecutando un proceso, debemos pulsar las teclas siguientes para detenerlo y luego ingresar el comando bg para continuar su ejecución en segundo plano como un trabajo. Para este ejemplo usaremos las siguientes líneas:
Ctrl + Z
tar -czf home.tar.gz . (proceso en ejecución el cual será detenido con Ctrl + Z) bg (ejecución del comando en segundo plano) jobs (visualización de los trabajos realizados)
Podemos observar que el proceso se sigue ejecutando, pero ahora en segundo plano. También será posible ejecutar un proceso directamente en segundo plano ingresando el signo & al final de este:
tar -czf home.tar.gz . & Jobs
3. Guardar los procesos de Linux en ejecución después de salir de la terminal en Linux
Este es un punto esencial ya que como hemos mencionado, en modo normal cuando se cierra la terminal todos los procesos activos finalizaran, de modo que es posible permitir que estos sigan en ejecución aun cuando la terminal sea cerrada.
Para este propósito podemos usar el comando disown el cual se usará después de que se haya iniciado un proceso y se haya puesto en segundo plano, el comando disown es un trabajo de shell que tiene como misión eliminar los trabajos de la lista activa del Shell activo.
Con la ejecución de disown, cuando cerremos la terminal, el trabajo no se bloqueará ni enviará un SIGHUP a ningún trabajo secundario. Su sintaxis básica es:
disown jobID
Para su funcionamiento ejecutaremos lo siguiente:
sudo rsync Templates/* /var/www/html/files/ & (comando a ejecutar) jobs (trabajos activos) disown -h %1 (orden de no cerrar el proceso o comando) jobs (visualización de los trabajos)
Las opciones a usar con disown son:
4. Guardar los procesos de Linux en ejecución después de salir de la terminal en Linux
La tarea básica del comando nohup es evitar que el comando sea cancelado automáticamente al cerrar sesión o al salir del shell. Al usar el comando nohup (no hangup), la señal de suspensión (HUP), la cual se envía a un proceso para informarle que el usuario se ha desconectado, es interceptada por nohup con la finalidad de permitir que el proceso continúe ejecutándose en segundo plano.
La sintaxis de uso es la siguiente:
nohup comando [comando-argumento ...]
Para este caso usaremos el siguiente ejemplo. Si la entrada estándar es un terminal, nohup lo redirecciona desde /dev/null. Por lo tanto, la entrada de terminal no es posible cuando se ejecuta un comando con nohup. En caso de que la salida estándar es una terminal, la salida del comando se agrega al archivo nohup.out o $HOME/nohup.out. Si el error estándar es un terminal, se redirige a la salida estándar. Para guardar la salida en un archivo , debemos usar "nohup comando> archivo".
nohup tar -czf iso.tar.gz Templates/* & jobs
5. Desvincular un proceso de Linux en la terminal
Si el objetivo es separar por completo un proceso de la terminal, debemos usar la siguiente sintaxis:
app </dev/null &>/dev/null &
Por ejemplo:
firefox </dev/null &>/dev/null &
6. Usar procesos en segundo plano con Screen en Linux
En caso de usar un comando en segundo plano, con las opciones nohup y &), éste se ejecutará aun después de cerrar la sesión, el problema radica en que, al volvernos a conectar a la misma sesión de nuevo, no veremos el trabajo activo en segundo plano, para corregir esto existe el comando screen.
screen es un administrador de ventanas de pantalla completa el cual gestiona un terminal físico entre varios procesos siendo normalmente los shells interactivos. Cada terminal virtual ofrece las funciones de un terminal DEC VT100 y, además, varias funciones de control de los estándares ISO 6429 (ECMA 48, ANSI X3.64) e ISO 2022 lo cual la hace sumamente dinámica.
Cuando ejecutamos screen, se crea una sola ventana con un shell o con el comando especificado y luego se desvía con el fin de poder usar el programa de forma normal.
Para instalar screen en Linux vamos a ejecutar lo siguiente. Allí ingresamos la letra S para confirmar la descarga e instalación.
sudo apt install screen
Una vez instalado ejecutamos el comando “screen” y veremos lo siguiente:
Allí pulsamos la tecla Enter para ser redireccionados a la nueva ventana donde ejecutamos el proceso o comando a usar en segundo plano:
sudo tar czf temp.tar.gz /tmp &
Podremos visualizar las ventanas activas usando. Para salir de la sesión de screen podremos usar las teclas
Ctrl + a + d
Ctrl + alt + d
screen -ls
7. Detener o matar un proceso suspendido o en segundo plano en Linux
Para esta acción el cual consiste en terminar la ejecución del proceso en segundo plano, podemos usar el comando “kill” y en lugar del PID podemos especificar el identificador de trabajo, por ejemplo:
jobs (lista los trabajos actuales) kill %2 (mata o termina el proceso identifica como 2)
8. Parar un proceso o pasar un proceso a segundo plano
Algunos programas necesitan mucho tiempo para terminar, y no hacen nada importante mientras tanto. Compilar programas es una de estas tareas, así como comprimir un fichero grande. No tiene sentido dejar de utilizar el ordenador mientras estos procesos terminan y consumen recursos. En estos casos es mejor ejecutarlos en segundo plano, para dejar el ordenador en condiciones de ejecutar otro programa.
Los procesos pueden ser suspendidos. Un proceso suspendido es aquel que no se está ejecutando actualmente, sino que esta temporalmente detenido. Después de suspender una tarea, puede indicar a la misma que continúe, en primer plano o en segundo, según necesite. Retomar una tarea suspendida no cambia en nada el estado de la misma ya que continuará ejecutándose justo donde se detuvo.
Para interrumpir un proceso se utiliza la siguiente combinación, al pulsar esta combinación el proceso muere y se liberan todos los recursos.
Ctrl + C
Vamos a probar enviar un comando repetitivo a segundo plano. El comando yes se utiliza para probar script que requiere muchas confirmaciones lo que hace es repetir “y” con lo que se escriba delante infinitamente hasta que se detenga el script o el usuario lo detenga:
- Si escribimos “yes” en la terminal y veremos una lista interminable de “y”.
- Si escribimos yes hola en la terminal y veremos una lista interminable de hola
Para eliminar un archivo sin pulsar ninguna tecla cuando pida confirmación podemos utilizar
yes | rm -i *.txt
Para enviar un proceso a segundo plano lo llamamos desde la linea de comandos seguido de & creamos infinitos dispositivos nulos
yes > /dev/null &
Esto nos mostrará el número de tarea y el pid [1] 4106. Si utilizamos ahora el comando jobs veremos
[1]+ Ejecutando yes > /dev/null &
para pasarlo a primer plano escribimos fg 1 y para matar el proceso kill 4106 que es el pid.
Fg 1 Kill 4106Con alguna de las opciones indicadas, será posible administrar de una forma mucho más central los procesos en segundo plano en Linux y así permitir que las tareas requeridas sean ejecutadas aun cuando se cierre la sesión.