Respuestas:
No menciona si esto se ejecuta como una aplicación X o una aplicación de consola.
Si es como una aplicación de consola, por supuesto, debe cerrarse. Se deshizo de su entrada / salida, más técnicamente el (pseudo) tty en el que estaba. Es muy poco probable que esto sea lo que quisiste decir, así que supongamos que estás hablando de una aplicación X.
nohup
debería funcionar, no estoy seguro de por qué no lo es. Cuando el shell se cierra, envía SIGHUP
a todos los procesos en su grupo de procesos. nohup le dice al comando que ignore SIGHUP.
También puede probar setsid, que desconecta el proceso del grupo de procesos
alias emacs='setsid emacs'
O agregue disown
después&
El método más confiable parece ser:
(setsid emacs &)
Esto se utiliza ( &)
para bifurcar a fondo y setsid
para separarse del control tty.
Puede poner esto en una función de shell:
fork() { (setsid "$@" &); }
fork emacs
Las posibilidades son:
El disown
comando incorporado:
emacs &
disown $!
&
actúa como un separador de comandos y disown
, por defecto, se convertirá en el trabajo más reciente, por lo que esto se puede acortar a:
emacs & disown
Doble- fork()
:
(emacs &)
Los comandos dentro de paréntesis (
)
se ejecutan en un proceso de shell separado.
setsid
, tal como lo sugiere Rich, podría ser la mejor opción, ya que desarma el TTY de control del proceso al crear una nueva sesión :
setsid emacs
Sin embargo, también es un poco impredecible: solo pasará fork()
a segundo plano si es el líder de un grupo de procesos (lo que no sucederá si setsid
se usa en un sh
script, por ejemplo; en tales ocasiones simplemente se volverá resistente a Ctrl- DO.)
(exec emacs)
funcionaría?
(emacs)
. Si el subshell recibe un comando único, el exec
está implícito, al menos en el caso de bash
. Lo mismo se aplica a bash -c 'foo'
versus bash -c 'exec foo'
. (Sin embargo, nota que emacs sí pueden separar desde el terminal;.. Gvim, por ejemplo, ¿esto Es mejor prueba con un programa con el comportamiento conocido)
Comprueba tu configuración de shell. También puedes probar la pantalla en lugar de nohup
.
screen -r
si lo Ctrl-A Ctrl-D
desconecta antes de cerrar la sesión.
screen -d -m sh -c "{do stuff } exit"
tiene mucho más sentido.