Я розмістив відповідь на старішу тему подібної теми з відповідями з різних джерел. Далі йде копія відповіді, адаптована для цього потоку.
Наступні роботи:
$ (gui_app &> /dev/null &)
Це відповідь Натана Фелмана плюс перенаправлення.
"&> / dev / null" перенаправляє як stdout, так і stderr на нульовий пристрій. Остання амперсанда робить процес запущеним у фоновому режимі. Дужки навколо команди призведуть до запуску вашого "gui_app" в нижній частині.
Це призведе до від'єднання процесу "gui_app" з консолі, з якої виконується ця команда. Тож навіть якщо ви закриєте віконний емулятор батьківського терміналу, "gui_app" не закриється. Я запустив це, потім подивився на дерево процесу з командою "pstree" і виявив, що застосований таким чином додаток стане дочірнім процесом до "init".
Наприклад,
$ gui_app &> /dev/null &
запустить додаток у фоновому режимі, але він стане дочірнім процесом консольного процесу і закінчиться, коли ви закриєте термінал. (Хоча вихід із терміналу через bash за допомогою команди exit або Ctrl-D дозволить bash очиститись, передавши фоновий процес на init.)
"nohup" працює так, як запропонував NawaMan, але перенаправляє вихід і помилку до файлу за замовчуванням. Як відповів JeffG, команда "відключити" (якщо вона доступна в оболонці) може від'єднати процес від терміналу після того, як ви розпочали фоновий процес:
$ gui_app &
$ disown
(BTW все це стосується bash. Я впевнений, що інші оболонки мають інші методи / синтаксис для цього.)
Деякі посилання:
Розкриття процесів (електроінструменти UNIX)
Якщо це простий дзвінок на додаток для графічного інтерфейсу - без складних варіантів і подібного - здається, що використання пускового пристрою типу "gmrun" або dmenu (попередження: гучне звучання) також є хорошим варіантом. Прив’яжіть до ключової комбінації. Я ще не використовую пусковий апарат, але спробував ці два.
ПРИМІТКА: CarlF у коментарях інших звітів про потоки додатків GUI, запущених методом "gui_app &", не закривається, коли він виходить з батьківського терміналу. Я думаю, що ми закривали термінал різними способами. Я закривав вікно, в якому запускався емулятор терміналу. Я думаю, що він, можливо, виходив з емулятора терміналу через оболонку (команда виходу або Ctrl-D). Я перевірив це і побачив, що вихід через bash не зупиняє GUI, розпочатий як фоновий процес терміналу, як каже CarlF. Здається, що баш руками від фонових процесів ініціює, коли йому надається можливість очистити. Насправді, це повинен бути механізм, за допомогою якого фоновий процес, розпочатий у нижній частині, передається в init.