stop sirve que para log linux bash nohup

linux - sirve - ¿Cómo maneja bash los trabajos cuando se desconecta?



para que sirve nohup en linux (2)

Si los trabajos en segundo plano en ejecución se terminan al salir depende del shell. Normalmente, Bash no hace esto, pero se puede configurar para shells de inicio de sesión ( shopt -s huponexit ). En cualquier caso, el acceso al tty es imposible después de que el proceso de control (como un shell de inicio de sesión) haya finalizado.

Las situaciones que siempre causan SIGHUP incluyen:

  • Cualquier cosa en primer plano cuando el tty está cerrado.
  • Cualquier trabajo en segundo plano que incluya procesos detenidos cuando finaliza su shell ( SIGCONT y SIGHUP ). Los depósitos suelen avisarle antes de permitir que esto suceda.

Resumen de huponexit:

$ shopt -s huponexit; shopt | grep huponexit huponexit on # Background jobs will be terminated with SIGHUP when shell exits $ shopt -u huponexit; shopt | grep huponexit huponexit off # Background jobs will NOT be terminated with SIGHUP when shell exits

Por lo que he entendido de los libros y manuales de bash es eso. Cuando un usuario cierra la sesión de bash, todos los trabajos en segundo plano iniciados por el usuario terminarán automáticamente, si no está utilizando nohup o disown. Pero hoy lo he probado:

  1. Inicié sesión en mi escritorio gnome y accedí a gnome-terminal.
  2. Hay dos pestañas en el terminal y en una, creé un nuevo usuario llamado prueba y me conecté como prueba

    su - test

  3. comenzó un guión.

    cat test.sh #!/bin/bash sleep 60 printf "hello world!!" exit 0 ./test.sh &

  4. Después de eso me desconecté de la prueba y cerré la pestaña

  5. En la siguiente pestaña, seleccioné ps aux como root y encontré que el trabajo aún se está ejecutando.

¿Cómo está pasando esto?


Solo los shells interactivos eliminan los trabajos cuando los cierras. Otros shells (por ejemplo, los que obtiene utilizando su - username ) no hacen eso. Y los shells interactivos solo matan subprocesos directos.