22 votos

Hacer procesos en segundo plano obtener un SIGHUP al cerrar sesión?

Este es un seguimiento a esta pregunta.

He realizado algunas pruebas más, se ve como realmente no importa si esto se hace en la consola física o a través de SSH, ni esto sucede sólo con SCP; yo también lo probé con cat /dev/zero > /dev/null. El comportamiento es exactamente el mismo:

  • Iniciar un proceso en segundo plano usando & (o poner en segundo plano después de que se comenzó a usar CTRL-Z y bg); esto se hace sin el uso de nohup.
  • Cierre la sesión.
  • Iniciar sesión de nuevo.
  • El proceso aún está ahí, funcionando perfectamente, y ahora es un directo niño de init.

Puedo confirmar que tanto el SCP y el GATO se cierra inmediatamente si se envía un SIGHUP; he probado esta usando kill -HUP.

Por lo tanto, realmente se parece a SIGHUP es no se envía al cierre de la sesión, al menos para los procesos en segundo plano (no se puede probar con un primer plano de uno por razones obvias).

Esto me pasó al principio con el servicio de la consola de VMware ESX 3.5 (que se basa en RedHat), pero yo era capaz de replicar exactamente en CentOS 5.4.

La pregunta es, de nuevo: ¿no debería un SIGHUP ser enviado a los procesos, incluso si se está ejecutando en segundo plano, con el inicio de sesión? ¿Por qué esto no sucede?


Editar

He comprobado con strace, como por Kyle respuesta.
Como me esperaba, el proceso no recibe ninguna señal al cerrar la sesión desde la shell donde fue lanzado. Esto sucede tanto cuando se utiliza la consola del servidor y a través de SSH.

30voto

yulia Puntos 16

Respuesta encontrada.

Para BASH, esto depende de la huponexit shell opción, que puede ser visto y/o en conjunto con el construido-en shopt comando.

Se parece esta opción está desactivada por defecto, al menos en RedHat-sistemas basados en.

Más información en la página man de BASH:

Cierre el shell por defecto tras la recepción de un SIGHUP. Antes de salir, un shell interactivo reenvía el SIGHUP a todos los puestos de trabajo, en marcha o parado. Se detuvo de envío de los trabajos SIGCONT para asegurarse de que reciban la SIGHUP. Para evitar que la cáscara de enviar la señal a un trabajo en particular, debe ser eliminado de la tabla de trabajos con la repudiar integrados (véase el SHELL de COMANDOS INTEGRADOS a continuación) o para no recibir SIGHUP el uso de repudiar a-h.

Si el huponexit shell opción se ha establecido con shopt, bash envía un SIGHUP a todos los puestos de trabajo cuando una interactive shell de inicio de sesión se cierra.

4voto

Kyle Brandt Puntos 50907

Se enviará SIGHUP en mis pruebas:

Shell1:

[kbrandt@kbrandt-opadmin: ~] ssh localhost
[kbrandt@kbrandt-opadmin: ~] perl -e sleep & 
[1] 1121
[kbrandt@kbrandt-opadmin: ~] ps
  PID TTY          TIME CMD
 1034 pts/46   00:00:00 zsh
 1121 pts/46   00:00:00 perl
 1123 pts/46   00:00:00 ps

Shell2:

strace -e trace=signal -p1121

Shell1 De Nuevo:

[kbrandt@kbrandt-opadmin: ~] exit
zsh: you have running jobs.
[kbrandt@kbrandt-opadmin: ~] exit
zsh: warning: 1 jobs SIGHUPed
Connection to localhost closed.

Shell2 De Nuevo:

strace -e trace=signal -p1121
Process 1121 attached - interrupt to quit
pause()                                 = ? ERESTARTNOHAND (To be restarted)
--- SIGHUP (Hangup) @ 0 (0) ---
Process 1121 detached

¿Por qué sigue funcionando?:
Avanzados de Programación en el Entorno Unix por Stevens cubre esta en la sección 9.10: Huérfanos Grupos de Procesos. La mayoría de la sección correspondiente:

Desde el grupo de procesos que es huérfano cuando el padre termina, POSIX.1 requiere que cada proceso en el recién huérfano grupo de procesos que es detenido (como nuestro hijo es) enviado el colgar señal SIGHUP), seguido por el continuar la señal SIGCONT).

Esto hace que el niño debe continuar, después de procesar el soporte de la señal. La acción predeterminada para colgar señal es para terminar el proceso, así tenemos que dar una señal al controlador de captura de la señal. Por lo tanto, esperamos printf en el sig_hup función a aparecen antes de printf en el pr_ids la función.

0voto

Chris S Puntos 65813

Yo uso csh y procesos en segundo plano continuar ejecutando a lo largo de cuando yo cierre de sesión.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: