Publiquei uma resposta em um tópico antigo de tópico semelhante com respostas de várias fontes. A seguir, uma cópia dessa resposta adaptada para este tópico.
Trabalhos seguintes:
$ (gui_app &> /dev/null &)
Esta é a resposta de Nathan Fellman mais o redirecionamento.
"&> / dev / null" redireciona stdout e stderr para o dispositivo nulo. O último e comercial faz com que o processo seja executado em segundo plano. Os parênteses ao redor do comando farão com que seu "gui_app" seja executado em um subshell.
Fazer isso desanexará o processo "gui_app" do console em que você executa este comando. Portanto, mesmo se você fechar o emulador de terminal pai da janela, o "gui_app" não será fechado. Eu executei isso, então olhei para a árvore do processo com o comando "pstree" e descobri que um aplicativo iniciado dessa maneira se tornará um processo filho para "init".
Por exemplo,
$ gui_app &> /dev/null &
executará o aplicativo em segundo plano, mas se tornará um processo filho do processo do console e será encerrado quando você fechar o terminal. (Embora sair do terminal através do bash usando o comando exit ou Ctrl-D permita que o bash seja limpo, envie o processo em segundo plano para o init.)
"nohup" funciona como NawaMan sugeriu, mas que redireciona a saída e o erro para um arquivo por padrão. Como JeffG respondeu, o comando "disown" (se disponível no shell) pode desanexar o processo do terminal depois que você inicia um processo em segundo plano:
$ gui_app &
$ disown
(Tudo isso se aplica ao bash. Tenho certeza de que outros shells têm outros métodos / sintaxe para fazer isso.)
Algumas referências:
Disowning Processes (UNIX Power Tools)
Se for uma simples chamada para um aplicativo GUI - sem opções complicadas e outras coisas -, parece que usar um iniciador como "gmrun" ou dmenu (aviso: áudio alto) também é uma boa opção. Ligue-o a uma combinação de teclas. Ainda não uso um lançador, mas tentei esses dois.
OBSERVAÇÃO: CarlF nos comentários dos outros relatórios de encadeamento Os aplicativos GUI iniciados pelo método "gui_app &" não fecham quando ele sai do terminal pai. Eu acho que estávamos fechando o terminal de maneiras diferentes. Eu estava fechando a janela em que o emulador de terminal estava rodando. Acho que ele pode estar saindo do emulador de terminal através do shell (comando de saída ou Ctrl-D). Eu testei isso e vi que sair do bash não para a GUI iniciada como processo em segundo plano do terminal, como diz CarlF. Parece que bash retira processos em segundo plano para iniciar quando é dada a chance de limpar. De fato, esse deve ser o mecanismo pelo qual o processo em segundo plano iniciado em um subshell é enviado para o init.