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ónNO_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.
-
nohuphace que el comando ignore las señalesNOHUPySIGHUPdel shell -
&hace que el proceso se ejecute en segundo plano en un subterminal -
disownseguido de un argumento (el índice del número de trabajo en su lista de trabajos) evita que el shell envíe una señalSIGHUPa procesos secundarios. El uso dedisownsin 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