Realmente no sé cuáles son las ventajas de ejecutar aplicaciones en segundo plano.
Algo así como Application &
a través de la línea de comando.
¿Por qué exactamente ejecutamos aplicaciones en segundo plano y cuándo debería decidir hacerlo?
Respuesta1
Generalmente las aplicaciones que tardan demasiado en ejecutarse y no requieren interacción del usuario se envían a segundo plano para que podamos continuar nuestro trabajo en la terminal.
Los trabajos que se ejecutan en segundo plano se tratan igual que los trabajos que se ejecutan en primer plano, excepto que sus STDOUT, STDIN y STDERR varían.
Si tiene un trabajo que lleva demasiado tiempo, como la compresión de archivos o la copia de seguridad, puede enviar esos trabajos a un segundo plano.
Puede enumerar los trabajos que se ejecutan en segundo plano mediante jobs
el comando.
$ ./job1.sh &
[1] 9747
$ ./job2.sh &
[2] 9749
$ ./job3.sh &
[3] 9751
$ jobs
[1] Running ./job1.sh &
[2]- Running ./job2.sh &
[3]+ Running ./job3.sh &
Aquí, cada vez que se envía un trabajo al shell en segundo plano, se muestra el job id
y pid
del proceso. En caso de que queramos que el proceso vuelva al primer plano, podemos usar fg
el comando para recuperarlo.
$ fg 1
./job1.sh
Pero tenga en cuenta que cuando cierre la terminal (shell), SIGHUP se enviará a todos los procesos en segundo plano que se generan desde el shell, lo que provocará que esos procesos mueran. Para evitar esto, puede usar disown
el comando para eliminar esos procesos de la tabla de trabajos y así evitar que el proceso se elimine.
Una mejor manera es iniciar el proceso en segundo plano con nohup
un comando para que las señales SIGHUP no interrumpan el proceso y se ejecute de forma segura en segundo plano.
También se puede evitar que SIGHUP se envíe a procesos secundarios (trabajos bg) configurando huponexit
la opción del shell bash.
$ shopt -s huponexit
Esta opción está configurada de forma predeterminada en las últimas versiones de Bash, pero en caso de que no esté configurada, podemos agregarla para ~/.bashrc
que sea un comportamiento predeterminado.
Respuesta2
Si ejecuta una aplicación que necesita (digamos 5 minutos para finalizar, por ejemplo un trabajo de copia), el shell se bloquea mientras el programa se está ejecutando, los 5 minutos completos. El trabajo de copia se encuentra entonces en el llamado grupo de procesos en primer plano, indicado por un +
inicio de sesión ps
. Es posible que tengas que hacer algún otro trabajo durante esos 5 minutos, pero el caparazón está bloqueado.
Por otro lado, cuando ejecuta el trabajo de copia en segundo plano ( cp source target &
), su trabajo se ejecuta en segundo plano sin bloquear el shell actual. Puedes seguir con otras cosas. Puede volver a poner el proceso en primer plano fg
si lo desea.