Acabo de cambiar de bash a zsh.
En bash, las tareas en segundo plano continúan ejecutándose cuando el shell sale. Por ejemplo aquí, dolphin
continúa ejecutándose después de exit
:
$ dolphin .
^Z
[1]+ Stopped dolphin .
$ bg
[1]+ dolphin . &
$ exit
Esto es lo que quiero como comportamiento predeterminado.
Por el contrario, el comportamiento de zsh es advertir sobre la ejecución de trabajos exit
y luego cerrarlos si exit
vuelve a hacerlo . Por ejemplo, aquí, dolphin
se cierra cuando el segundo exit
comando realmente sale del shell:
% dolphin .
^Z
zsh: suspended dolphin .
% bg
[1] + continued dolphin .
% exit
zsh: you have running jobs.
% exit
¿Cómo hago aquí el comportamiento predeterminado de zsh como el de bash?
setopt nohup
su~/.zshrc
. Entonces, iniciar un comando en segundo plano con&
también lo rechazará siempre. Aunque, de forma predeterminada, zsh todavía le recordará que tiene trabajos en ejecución cuando intente salir. También puedes apagar eso consetopt nocheckjobs
.setopt nocheckjobs
hace lo que quiero. Ahora encontré las opciones disponibles enman zshoptions
. Me gustaría apagar la advertencia. Sé cuando tengo procesos en segundo plano y no los necesito. Me gustaría cerrar los procesos en segundo plano a menos que los inicie connohup
. Actualmente uso esto con una función de shell que ejecuta PyCharm en segundo plano connohup
. Cuando escribo,pycharm .
se ejecutanohup charm $@ &
. No se cierra cuando cierro la terminal, pero sigo recibiendo esa advertencia y tengo que escribirexit
dos veces.De la documentación de zsh :
Así que configura la
NO_HUP
opción:% setopt NO_HUP
fuente
Descubrí que usar una combinación de
nohup
,&
ydisown
funciona para mí, ya que no quiero que los trabajos se ejecuten permanentemente cuando el shell ha salido.nohup <command> & disown
Si bien
&
me ha funcionadobash
, descubrí que cuando usaba solonohup
,&
odisown
en comandos en ejecución, como un script que llama a un comando de ejecución de Java, el proceso aún se detendría cuando se salía del shell.nohup
hace que el comando ignoreNOHUP
ySIGHUP
señales desde el shell&
hace que el proceso se ejecute en segundo plano en un subterminaldisown
seguido de un argumento (el índice del número de trabajo en su lista de trabajos) evita que el shell envíe unaSIGHUP
señal a los procesos secundarios. El usodisown
sin un argumento hace que se establezca de forma predeterminada en el trabajo más reciente.Encontré la información
nohup
ydisown
en esta página , y la&
información en esta respuesta SO .fuente
Normalmente lo uso
screen
para mantener en ejecución los trabajos en segundo plano.1) Cree una sesión de pantalla:
2) Ejecute sus scripts, servicios, demonios o lo que sea
3) Salir (desconectar) de la sesión de pantalla con
o atajo
ALT+A then d
Después de algunos cientos de años, si desea reanudar su sesión (vuelva a adjuntar):
Si desea saber si hay una sesión de pantalla, su nombre y su estado (adjunto o separado):
Esta solución funciona en todos los intérpretes de terminal como bash, zsh, etc. Consulte también
man screen
fuente