Estoy ejecutando un comando en un servidor. Viene con esta biblioteca.http://www.graphicsmagick.org/.
Básicamente tengo un bucle for que procesa imágenes en muchos archivos.
El comando se ejecuta durante horas y se ejecutará durante horas. Me pregunto: ¿puedo salir de ssh y seguir ejecutando esos comandos en una máquina remota? ¿Salir de ssh envía alguna señal para finalizar la ejecución del comando actual?
La otra cosa que noté... Aunque estoy ejecutando el comando de forma remota, mi computadora portátil se está sobrecalentando. El monitor de actividad muestra que bash está usando el 70% de la CPU. estoy en macbook pro
Ahora esto es extraño. ¿Cómo puede el comando remoto causar tensión en la máquina local?
Respuesta1
Una solución es anteponer el comando con nohup
. Esto le dice a la computadora que ignore las señales de "colgado" (como salir de una sesión ssh). Esto PUEDE NO FUNCIONAR con for
bucles.
Otra buena solución (y mi forma favorita de hacerlo) es instalar el paquete 'pantalla'. screen
proporciona una terminal virtual de la que se puede desconectar, dejando los procesos en ejecución presionando CTRL + A , D
. Luego se puede volver a conectar la pantalla más tarde con screen -r
.
Respuesta2
Cuando sale un líder de sesión con terminal de control asociado ( bash
, en su caso), el sistema operativo envía SIGHUP a todos los procesos en el grupo de procesos de primer plano (trabajo de primer plano). Además, bash
envía por defecto el SIGHUP a todos sus trabajos, en ejecución o detenidos (los trabajos detenidos también se envían SIGCONT). Ahora la acción predeterminada al recibir SIGHUP es la finalización del proceso.
Existen entonces varios enfoques para permitir que el proceso se ejecute después de bash
las salidas. Primero, puedes hacer que tu proceso sea inmune a SIGHUP; esto es lo que nohup
hace el comando. En segundo lugar, puede poner en segundo plano el grupo de procesos correspondiente e indicarle bash
que no le envíe SIGHUP; para esto disown
se utiliza el shell incorporado (tenga en cuenta también que hay una huponexit
opción de shell, que hace que SIGHUP se envíe a todos los trabajos cuando se cierra un shell de inicio de sesión interactivo).
Si desea volver a conectar una terminal al grupo de procesos después de iniciar sesión nuevamente, es posible que desee utilizar un contenedor capaz de hacerlo; multiplexores de terminales como los que screen
tienen esta funcionalidad.