2010-11-28 10 views
16

Por lo que entendí de los libros y manuales de bash es eso. Cuando un usuario cierra la sesión desde bash, todos los trabajos en segundo plano iniciados por el usuario finalizarán automáticamente, si no está utilizando nohup o no. Pero hoy lo probé:¿Cómo maneja bash los trabajos al cerrar la sesión?

  1. Conecté a mi escritorio gnome y accedí a gnome-terminal.
  2. Hay dos pestañas en la terminal y en un solo he creado una nueva prueba de usuario llamado y se haya identificado como prueba

    su - test 
    
  3. comenzó una secuencia de comandos.

    cat test.sh 
    #!/bin/bash 
    sleep 60 
    printf "hello world!!" 
    exit 0 
    
    
    ./test.sh & 
    
  4. Después de que cerrará la sesión de prueba y se cierra la pestaña

  5. En la siguiente pestaña que exected ps aux como root y se encontró que el trabajo todavía se está ejecutando.

¿Cómo está pasando esto?

+0

me di cuenta de que esta cuestión no tiene aún una respuesta aceptada y que hay una nueva pregunta similar en [SU] que podría ser interesante lectura: [http: // superuser.com/questions/662431/what-exactly-determines-if-a-backgrounded-job-is-killed-when-the-shell-is-exited](http://superuser.com/questions/662431/what -exactly-determina-if-a-backgrounded-job-is-killed-when-the-shell-is-exit) – Hennes

Respuesta

2

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

+0

El mismo truco en mi mac sin 'su'. – khachik

+0

¿Qué es el shell interactivo? – Unni

+0

¿Qué es shell interactivo? http://tldp.org/LDP/abs/html/intandnonint.html dice que, si $ PS1 está configurado, entonces es un shell interactivo. También cambié a otro tty usando ctrl + alt + f2 e inicié sesión como prueba y realicé lo mismo. el resultado es el mismo pero – Unni

12

Si la ejecución de trabajos en segundo plano finaliza al salir depende del shell. Bash normalmente 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.

situaciones que no siempre causan SIGHUP incluyen:

  • Cualquier cosa en primer plano cuando el TTY está cerrado.
  • Cualquier trabajo en segundo plano que incluya procesos detenidos cuando su shell finalice (SIGCONT y SIGHUP). Las conchas normalmente te advierten antes de permitir que esto suceda.

Resumen 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 
+2

, entonces usted está diciendo que, si la opción huponexit no está configurada, ¿entonces bash no matará las tareas en segundo plano de los usuarios? – Unni

+0

@Unni - Si 'huponexit' está configurado, Bash enviará SIGHUP a todos los trabajos cuando salga un shell de inicio de sesión interactivo (con ** salida ** o ** Ctrl + d **). –

Cuestiones relacionadas