¿Es necesario desconocer un proceso para que siga ejecutándose después de desconectarse?

¿Es necesario desconocer un proceso para que siga ejecutándose después de desconectarse?

¿Alguien podría explicar si disownes necesario y por qué si desea mantener un trabajo en ejecución incluso después de desconectarse?

Lo pregunto porque todos los sitios que he visitado dicen que se usen disowny, bgpor sí bgsolos, funcionan para mí y no estoy seguro de por qué.

¿Es porque no he entendido completamente disownpara qué sirve o hay algunas configuraciones en algún lugar que están afectando el comportamiento predeterminado del bgcomando?

Esto es lo que hice:

  • Conectado a mi caja CentOS 6 a través de SSH
  • Creó un proceso simple:

    tar zcvf example.tar.gz ./examplepath > /dev/null 2>&1
    
  • suspendido el trabajo

  • Lo reanudó en segundo plano a través debg 1
  • Desconectado del servidor SSH

Luego verifiqué a través de FTP para ver si el .tar.gzarchivo seguía creciendo en tamaño y así fue.

Respuesta1

Los procesos en segundo plano a través de bgo &normalmente morirán en 2 escenarios:

  1. El shell recibe un SIGHUP
  2. Intentan escribir en una terminal que ya no existe.

El elemento número 1 es el principal culpable al cerrar su terminal. Sin embargo, si sucede o no depende decómoCierras tu terminal. Puedes cerrarlo así:

  1. Algo así como hacer clic en la "X" en su administrador de ventanas
  2. Puede escribir exit, logouto CTRL+ D.

El elemento n.º 1 es el que dará lugar al envío de un SIGHUP. #2 no lo hace.

En pocas palabras, si inicia un proceso en segundo plano con bgy luego cierra la sesión con exit, logouto CTRL+ D, el proceso no se finalizará.

Respuesta2

Cuando cierra una terminal, todos los procesos que usan esta terminal (ver TTYcolumna en ps -elfel resultado) reciben un archivo SIGHUP. Depende de procesar qué hacer SIGHUP. En Unix clásicos (AIX, Solaris), los procesos se cierran con esta señal. Por eso es necesario utilizar disown. De man bash:

El shell se cierra de forma predeterminada al recibir un SIGHUP. Antes de salir, un shell interactivo reenvía SIGHUP a todos los trabajos, en ejecución o detenidos. Los trabajos detenidos se envían SIGCONT para garantizar que reciban SIGHUP. Para evitar que el shell envíe la señal a un trabajo en particular, debe eliminarse de la tabla de trabajos con el disown incorporado (consulte COMANDOS INTEGRADOS DEL SHELL a continuación) o marcarse para que no reciba SIGHUP usando disown -h.

información relacionada