Zamieściłem odpowiedź do starszego wątku o podobnym temacie z odpowiedziami z różnych źródeł. Poniżej znajduje się kopia tej odpowiedzi dostosowana do tego wątku.
Następujące prace:
$ (gui_app &> /dev/null &)
To jest odpowiedź Nathana Fellmana plus przekierowanie.
„&> / dev / null” przekierowuje zarówno stdout, jak i stderr do urządzenia zerowego. Ostatni znak amp powoduje, że proces działa w tle. Nawiasy wokół polecenia spowodują uruchomienie „gui_app” w podpowłoce.
Spowoduje to odłączenie procesu „gui_app” od konsoli, z której wykonasz to polecenie. Więc nawet jeśli zamkniesz okno, w którym działa emulator terminala nadrzędnego, „gui_app” się nie zamknie. Uruchomiłem to, potem spojrzałem na drzewo procesów za pomocą polecenia „pstree” i stwierdziłem, że aplikacja uruchomiona w ten sposób stanie się procesem potomnym do „init”.
Na przykład,
$ gui_app &> /dev/null &
uruchomi aplikację w tle, ale stanie się potomnym procesem konsoli i zakończy się po zamknięciu terminalu. (Chociaż wyjście z terminala przez bash za pomocą polecenia exit lub Ctrl-D pozwoli bashowi wyczyścić przekazując proces w tle do inicjalizacji.)
„nohup” działa zgodnie z sugestią NawaMan, ale domyślnie przekierowuje wyjście i błąd do pliku. Jak odpowiedział JeffG, polecenie „disown” (jeśli jest dostępne w powłoce) może odłączyć proces od terminala po uruchomieniu procesu w tle:
$ gui_app &
$ disown
(BTW wszystko to dotyczy bash. Jestem pewien, że inne powłoki mają do tego inne metody / składnię).
Niektóre odniesienia:
odrzucanie procesów (UNIX Power Tools)
Jeśli jest to zwykłe wywołanie aplikacji GUI - bez skomplikowanych opcji i podobnych - wydaje się, że dobrym pomysłem jest użycie programu uruchamiającego takiego jak „gmrun” lub dmenu (ostrzeżenie: głośny dźwięk). Powiąż go z kluczową kombinacją. Nie używam jeszcze programu uruchamiającego, ale wypróbowałem te dwa.
UWAGA: CarlF w komentarzach do innych raportów wątków Aplikacje GUI uruchomione za pomocą metody „gui_app &” nie zamykają się po wyjściu z terminala nadrzędnego. Myślę, że zamykaliśmy terminal na różne sposoby. Zamykałem okno, w którym działał emulator terminala. Myślę, że mógł wyjść z emulatora terminala przez powłokę (polecenie exit lub Ctrl-D). Przetestowałem to i zobaczyłem, że wyjście przez bash nie zatrzymuje GUI uruchomionego jako proces w tle terminala, jak mówi CarlF. Wydaje się, że nie trzeba uruchamiać procesów działających w tle, aby dać szansę oczyszczenia. W rzeczywistości musi to być mechanizm, za pomocą którego proces w tle rozpoczęty w podpowłoce zostaje przekazany do inicjowania.