Я разместил ответ на более старую ветку схожей темы с ответами из разных источников. Ниже приводится копия этого ответа, адаптированная для этой темы.
Следующие работы:
$ (gui_app &> /dev/null &)
Это ответ Натана Феллмана плюс перенаправление.
«&> / dev / null» перенаправляет как stdout, так и stderr на нулевое устройство. Последний амперсанд заставляет процесс работать в фоновом режиме. Скобки вокруг команды приведут к тому, что ваш «gui_app» будет запущен в подоболочке.
Выполнение этого отсоединит процесс «gui_app» от консоли, с которой вы выполняете эту команду. Так что даже если вы закроете окно, в котором запущен эмулятор родительского терминала, «gui_app» не закроется. Я запустил это, затем посмотрел на дерево процессов с помощью команды "pstree" и обнаружил, что приложение, запущенное таким образом, станет дочерним процессом для "init".
Например,
$ gui_app &> /dev/null &
запустит приложение в фоновом режиме, но оно станет дочерним процессом консольного процесса и прекратит работу при закрытии терминала. (Хотя выход из терминала через bash с помощью команды выхода или Ctrl-D позволит bash очиститься, передав фоновый процесс init.)
«nohup» работает так, как предложил NawaMan, но по умолчанию перенаправляет вывод и ошибку в файл. Как ответил JeffG, команда «disown» (если она доступна в оболочке) может отсоединить процесс от терминала после того, как вы запустили фоновый процесс:
$ gui_app &
$ disown
(Кстати, все это относится к bash. Я уверен, что другие оболочки имеют другие методы / синтаксис для этого.)
Некоторая справка:
Отказ от процессов (UNIX Power Tools)
Если это простой вызов приложения с графическим интерфейсом - без сложных опций и тому подобного - кажется, что использование средства запуска, такого как "gmrun" или dmenu (предупреждение: громкий звук), также является хорошим вариантом. Свяжите это с комбинацией клавиш. Я пока не пользуюсь лаунчером, но попробовал эти два.
ПРИМЕЧАНИЕ. CarlF в комментариях других потоков сообщает, что приложения с графическим интерфейсом, запущенные с помощью метода gui_app &, не закрываются при выходе из родительского терминала. Я думаю, что мы закрывали терминал по-разному. Я закрывал окно, в котором работал эмулятор терминала. Я думаю, что он мог выходить из эмулятора терминала через оболочку (команда выхода или Ctrl-D). Я проверил это и увидел, что выход через bash не останавливает запуск GUI в качестве фонового процесса терминала, как говорит CarlF. Кажется, что bash передает фоновые процессы инициализации, когда ему дают возможность очистить. Фактически, это должен быть механизм, с помощью которого фоновый процесс, запущенный в подоболочке, передается init.