Publiqué una respuesta a un hilo anterior de tema similar con respuestas de varias fuentes. A continuación hay una copia de esa respuesta adaptada para este hilo.
Siguientes trabajos:
$ (gui_app &> /dev/null &)
Esta es la respuesta de Nathan Fellman más la redirección.
"&> / dev / null" redirige tanto stdout como stderr al dispositivo nulo. El último comercial hace que el proceso se ejecute en segundo plano. Los paréntesis alrededor del comando harán que su "gui_app" se ejecute en una subshell.
Hacer esto desconectará el proceso "gui_app" de la consola desde la que ejecuta este comando. Entonces, incluso si cierra la ventana en la que se está ejecutando el emulador de terminal principal, "gui_app" no se cerrará. Ejecuté esto, luego miré el árbol de procesos con el comando "pstree" y encontré que una aplicación iniciada de esta manera se convertirá en un proceso hijo para "init".
Por ejemplo,
$ gui_app &> /dev/null &
ejecutará la aplicación en segundo plano, pero se convertirá en un proceso secundario del proceso de la consola y finalizará cuando cierre el terminal. (Aunque salir del terminal a través de bash usando el comando de salida o Ctrl-D permitirá que bash se limpie entregando el proceso en segundo plano a init).
"nohup" funciona como NawaMan ha sugerido, pero eso redirige la salida y el error a un archivo de forma predeterminada. Como JeffG ha respondido, el comando "desautorizar" (si está disponible en el shell) puede separar el proceso del terminal después de que haya iniciado un proceso en segundo plano:
$ gui_app &
$ disown
(Por cierto, todo esto se aplica a bash. Estoy seguro de que otros shells tienen otros métodos / sintaxis para hacerlo).
Alguna referencia:
Procesos de rechazo (UNIX Power Tools)
Si se trata de una simple llamada a una aplicación GUI, sin opciones complicadas y tal, parece que usar un lanzador como "gmrun" o dmenu (advertencia: audio fuerte) también es una buena opción. Asociarlo a una combinación de teclas. Todavía no uso un lanzador pero he probado esos dos.
NOTA: CarlF en los comentarios de los otros hilos informa que las aplicaciones GUI iniciadas mediante el método "gui_app &" no se cierran cuando sale del terminal principal. Creo que estábamos cerrando la terminal de diferentes maneras. Estaba cerrando la ventana en la que se ejecutaba el emulador de terminal. Creo que puede haber estado saliendo del emulador de terminal a través del shell (comando de salida o Ctrl-D). Probé esto y vi que salir de bash no detiene la GUI iniciada como proceso de fondo del terminal, como dice CarlF. Parece que bash deja de lado los procesos en segundo plano para iniciar cuando se le da la oportunidad de limpiar. De hecho, este debe ser el mecanismo por el cual el proceso en segundo plano iniciado en una subshell se transfiere a init.