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.
-
nohup
hace que el comando ignore las señalesNOHUP
ySIGHUP
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ñalSIGHUP
a procesos secundarios. El uso dedisown
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