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í, dolphincontinú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 exity luego cerrarlos si exitvuelve a hacerlo . Por ejemplo, aquí, dolphinse cierra cuando el segundo exitcomando 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 nohupsu~/.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 nocheckjobshace 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 escribirexitdos veces.De la documentación de zsh :
Así que configura la
NO_HUPopción:% setopt NO_HUPfuente
Descubrí que usar una combinación de
nohup,&ydisownfunciona para mí, ya que no quiero que los trabajos se ejecuten permanentemente cuando el shell ha salido.nohup <command> & disownSi bien
&me ha funcionadobash, descubrí que cuando usaba solonohup,&odisownen 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.nohuphace que el comando ignoreNOHUPySIGHUPseñales desde el shell&hace que el proceso se ejecute en segundo plano en un subterminaldisownseguido de un argumento (el índice del número de trabajo en su lista de trabajos) evita que el shell envíe unaSIGHUPseñal a los procesos secundarios. El usodisownsin un argumento hace que se establezca de forma predeterminada en el trabajo más reciente.Encontré la información
nohupydisownen esta página , y la&información en esta respuesta SO .fuente
Normalmente lo uso
screenpara 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 dDespué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 screenfuente