J'ai posté une réponse à un fil de discussion plus ancien sur un sujet similaire avec des réponses provenant de diverses sources. Vous trouverez ci-dessous une copie de cette réponse adaptée à ce fil.
Travaux suivants :
$ (gui_app &> /dev/null &)
C'est la réponse de Nathan Fellman plus la redirection.
"&> /dev/null" redirige stdout et stderr vers le périphérique null. La dernière esperluette fait tourner le processus en arrière-plan. Les parenthèses autour de la commande feront en sorte que votre "gui_app" s'exécute dans un sous-shell.
En faisant cela, le processus "gui_app" sera détaché de la console à partir de laquelle vous exécutez cette commande. Ainsi, même si vous fermez la fenêtre dans laquelle l'émulateur de terminal parent est exécuté, "gui_app" ne se fermera pas. J'ai exécuté cette commande puis j'ai regardé l'arbre des processus avec la commande "pstree" et j'ai trouvé qu'une application démarrée de cette façon deviendra un processus enfant de "init".
Par exemple,
$ gui_app &> /dev/null &
exécutera l'application en arrière-plan, mais elle deviendra un processus enfant du processus de la console et se terminera lorsque vous fermerez le terminal. (Bien que quitter le terminal à travers bash en utilisant la commande exit ou Ctrl-D permettra à bash de faire le ménage en confiant le processus d'arrière-plan à init).
"nohup" fonctionne comme NawaMan l'a suggéré, mais cela redirige la sortie et l'erreur vers un fichier par défaut. Comme JeffG l'a répondu, la commande "disown" (si elle est disponible dans Shell) peut détacher le processus du terminal après avoir lancé un processus en arrière-plan :
$ gui_app &
$ disown
(BTW tout ceci s'applique à bash. Je suis sûr que d'autres shells ont d'autres méthodes/syntaxe pour faire cela).
Quelques références : Désactiver les processus (Outils puissants d'UNIX)
S'il s'agit d'un simple appel à une application GUI - sans options compliquées et autres - il semble que l'utilisation d'un lanceur comme "gmrun" ou dmenu (avertissement : audio fort) est également une bonne option. Liez-le à une combinaison de touches. Je n'utilise pas encore de lanceur mais j'ai essayé ces deux-là.
NOTE : CarlF dans le commentaires de l'autre fil rapporte que les applications GUI démarrées via la méthode "gui_app &" ne se ferment pas lorsqu'il quitte le terminal parent. Je pense que nous fermions le terminal de manière différente. Je fermais la fenêtre dans laquelle l'émulateur de terminal était exécuté. Je pense qu'il a peut-être quitté l'émulateur de terminal par le biais du Shell (commande exit ou Ctrl-D). J'ai testé cela et j'ai vu que sortir par bash n'arrête pas l'interface graphique démarrée comme processus d'arrière-plan du terminal comme le dit CarlF. Il semble que bash transfère les processus d'arrière-plan à init lorsqu'il a la possibilité de faire le ménage. En fait, cela doit être le mécanisme par lequel le processus d'arrière-plan lancé dans un sous-shell est transféré à init.