J'ai posté une réponse sur un fil plus ancien de sujets similaires avec des réponses de différentes sources. Voici 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 à la fois stdout et stderr vers le périphérique null. La dernière perluète rend le processus exécuté en arrière-plan. Les parenthèses autour de la commande feront que votre "gui_app" s’exécutera dans un sous-shell.
Cela détachera le processus "gui_app" de la console à partir de laquelle vous exécutez cette commande. Ainsi, même si vous fermez l'émulateur de terminal parent de la fenêtre en cours d'exécution, "gui_app" ne se ferme pas. J'ai couru cela puis regardé l'arbre des processus avec la commande "pstree" et trouvé une application démarrée de cette façon deviendra un processus enfant pour "init"
Par exemple,
$ gui_app &> /dev/null &
exécutera l'application en arrière-plan, mais deviendra un processus enfant du processus de la console et se terminera à la fermeture du terminal. (Bien que quitter le terminal par bash en utilisant la commande exit ou Ctrl-D laissera bash nettoyer en passant 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 a répondu, la commande "désaveu" (si disponible dans un shell) peut détacher le processus du terminal après avoir lancé un processus en arrière-plan:
$ gui_app &
$ disown
(BTW tout cela s'applique à bash. Je suis sûr que d'autres shells ont d'autres méthodes / syntaxes pour le faire.)
Quelques références:
Processus de désaveu (UNIX Power Tools)
S'il s'agit d'un simple appel à une application graphique - sans options compliquées et autres - il semble que l'utilisation d'un lanceur tel que "gmrun" ou dmenu (warning: un son puissant ) soit également une bonne option. Liez-le à une combinaison de touches. Je n'ai pas encore utilisé de lanceur, mais j'ai essayé ces deux-là.
REMARQUE: CarlF dans les commentaires de l’autre thread signale que les applications graphiques lancé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 différentes manières. Je fermais la fenêtre dans laquelle s'exécutait l'émulateur de terminal. Je pense qu'il est peut-être sorti de l'émulateur de terminal via le shell (commande de sortie ou Ctrl-D). J'ai testé cela et vu que quitter via bash n'arrête pas l'interface utilisateur graphique en tant que processus d'arrière-plan du terminal, comme le dit CarlF. Il semble que bash bas les processus d'arrière-plan pour commencer quand il est donné la chance de nettoyer. En fait, il doit s'agir du mécanisme par lequel le processus d'arrière-plan démarré dans un sous-shell est transmis à init.