Ho pubblicato una risposta a un vecchio thread di argomento simile con risposte da varie fonti. Di seguito è una copia di quella risposta adattata per questa discussione.
I seguenti lavori:
$ (gui_app &> /dev/null &)
Questa è la risposta di Nathan Fellman più il reindirizzamento.
"&> / dev / null" reindirizza sia stdout che stderr sul dispositivo null. L'ultima e commerciale fa eseguire il processo in background. Le parentesi attorno al comando faranno funzionare "gui_app" in una subshell.
In questo modo si scollegherà il processo "gui_app" dalla console da cui si esegue questo comando. Quindi, anche se si chiude l'emulatore di terminale parent della finestra in esecuzione, "gui_app" non si chiuderà. Ho eseguito questo quindi ho guardato l'albero dei processi con il comando "pstree" e ho trovato un'applicazione avviata in questo modo diventerà un processo figlio di "init".
Per esempio,
$ gui_app &> /dev/null &
eseguirà l'applicazione in background, ma diventerà un processo figlio del processo della console e terminerà quando si chiude il terminale. (Sebbene uscire dal terminale tramite bash usando il comando exit o Ctrl-D consentirà a bash di ripulire consegnando il processo in background a init.)
"nohup" funziona come ha suggerito NawaMan, ma per impostazione predefinita reindirizza l'output e l'errore su un file. Come ha risposto JeffG, il comando "disown" (se disponibile nella shell) può staccare il processo dal terminale dopo aver avviato un processo in background:
$ gui_app &
$ disown
(A proposito, tutto ciò vale per bash. Sono sicuro che altre shell hanno altri metodi / sintassi per farlo.)
Alcuni riferimenti:
Disowning Processes (UNIX Power Tools)
Se si tratta di una semplice chiamata a un'applicazione della GUI - senza opzioni complicate e simili - sembra che anche usare un launcher come "gmrun" o dmenu (avviso: audio forte) sia una buona opzione. Associlo a una combinazione di tasti. Non uso ancora un launcher ma ho provato quei due.
NOTA: CarlF nei commenti degli altri thread riporta che le app della GUI avviate tramite il metodo "gui_app &" non si chiudono quando esce dal terminale principale. Penso che stessimo chiudendo il terminal in diversi modi. Stavo chiudendo la finestra in cui era in esecuzione l'emulatore di terminale. Penso che potrebbe essere uscito dall'emulatore di terminale attraverso la shell (comando di uscita o Ctrl-D). Ho provato questo e ho visto che uscire da bash non ferma la GUI avviata come processo in background del terminale, come dice CarlF. Sembra che bash stia iniziando i processi in background quando gli viene data la possibilità di ripulire. In realtà, questo deve essere il meccanismo mediante il quale il processo in background avviato in una subshell viene passato a init.