update theme robbyrussell mac instalar best bash zsh jobs

bash - theme - Salga de zsh, pero deje los trabajos en ejecución abiertos?



zsh god (4)

Comience el programa con-

dolphin &!

El &! ( o de forma equivalente, &| ) es un atajo específico de zsh para ambos fondos y rechaza el proceso, por lo que salir del shell lo dejará en ejecución.

Acabo de cambiar de bash a zsh.

En bash, las tareas en segundo plano continúan ejecutándose cuando el shell se cierra. Por ejemplo aquí, dolphin continúa corriendo después de la exit :

$ dolphin . ^Z [1]+ Stopped dolphin . $ bg [1]+ dolphin . & $ exit

Esto es lo que quiero como el comportamiento predeterminado.

Por el contrario, el comportamiento de zsh es advertir sobre la ejecución de trabajos al exit , luego ciérrelos si exit nuevamente. Por ejemplo, aquí, el dolphin está cerrado cuando el segundo comando de exit sale del caparazón:

% dolphin . ^Z zsh: suspended dolphin . % bg [1] + continued dolphin . % exit zsh: you have running jobs. % exit

¿Cómo hago el comportamiento predeterminado de zsh aquí como bash?


De la documentación de zsh :

HUP

... En zsh, si tiene un trabajo en segundo plano ejecutándose cuando el shell sale, el shell supondrá que quiere que lo maten; en este caso, se envía una señal particular llamada SIGHUP ... Si a menudo comienza trabajos que deberían continuar incluso cuando el shell ha salido, entonces puede establecer la opción NO_HUP , y los trabajos en segundo plano se dejarán solos.

Así que simplemente configure la opción NO_HUP :

% setopt NO_HUP


He descubierto que el uso de una combinación de nohup , & , y el disown funciona para mí, ya que no quiero que los trabajos se ejecuten permanentemente cuando el shell ha salido.

nohup <command> & disown

Mientras que just & ha funcionado para mí en bash , al usar solo nohup , & , o disown en los comandos en ejecución, como un script que llama a un comando de ejecución java, el proceso aún se detiene cuando se sale del shell.

  • nohup hace que el comando ignore las señales NOHUP y SIGHUP del shell
  • & hace que el proceso se ejecute en segundo plano en un subterminal
  • disown seguido de un argumento (el índice del número de trabajo en su lista de trabajos) evita que el shell envíe una señal SIGHUP a procesos secundarios. El uso de disown sin un argumento hace que se establezca de manera predeterminada en el trabajo más reciente.

Encontré la información nohup y disown en esta página , y la información de esta SO .


Normalmente utilizo la screen para mantener los trabajos en segundo plano en ejecución.

1) Crear una sesión de pantalla:

screen -S myScreenName

2) Inicie sus scripts, servicios, daemons o lo que sea

3) Salir (separar) la sesión de pantalla con

screen -d

o atajo ALT+A then d

Después de unos cientos de años, si desea reanudar su sesión (volver a conectar):

screen -r myScreenName

Si desea saber si hay una sesión de pantalla, su nombre y su estado (adjunto o no):

screen -ls

Esta solución funciona en todos los intérpretes de terminal como bash, zsh, etc. Ver también man screen