Как сохранить порожденные программы GUI при закрытии bash

299
Robert Pollak

Когда я запускаю программы GUI из окна терминала (с '&' в конце), как я могу закрыть терминал, не закрывая также программы GUI?

1
Не предназначено, чтобы быть конкурирующим ответом [Paul w. Ответ Модифика] (https://superuser.com/a/1277430/401839), который выглядит как простое и простое решение, но дополнительная идея: Запустите терминальный мультиплексор (tmux или screen). Когда вы уничтожаете родительский bash, терминальный мультиплексор и его дочерние элементы будут жить. Терминальные мультиплексоры великолепны: быстрые сочетания клавиш для создания нового сеанса, отсоединение защиты (очень полезно для удаленных оболочек!), Возможности копирования и вставки в текстовом режиме (помимо того, что может предложить графический интерфейс), быстрое разбиение окна (на несколько оболочек) , так далее. TOOGAM 6 лет назад 0

4 ответа на вопрос

2
Paul w. Muad'dib

Вы можете использовать disown эту опцию, чтобы программа не получала отбойный звонок от своего начального терминала. Таким образом, программа GUI остается открытой, когда терминал закрыт.

Ах, похоже, disown - это команда, встроенная в bash (поэтому на странице руководства bash есть подробности об этой команде). Вы случайно не знаете, эффект от того, что подпрограммы закрывают черту, довольно уникален для bash, или bash просто обеспечивает решение проблемы, которая имеет тенденцию быть более распространенной (затрагивающей и другие оболочки Unix)? PS, я вижу, ваш ответ был только что принят (пока я набирал этот комментарий). Congrats. TOOGAM 6 лет назад 0
Я только что посмотрел [документацию для zsh] (http://zsh.sourceforge.net/Doc/Release/Jobs-_0026-Signals.html#Jobs-_0026-Signals) (которую я использую на другой машине), а также имеет команду «Отмена». После проверки [manpage of ksh] (https://manpages.debian.org/stretch/ksh/ksh.1.en.html), кажется, также появилась команда «disisown». Paul w. Muad'dib 6 лет назад 1
0
Xen2050

Используйте nohupдля запуска программы, она будет "запускать команду, не подверженную зависаниям, с выводом в не-tty"

Просто добавьте к команде префикс nohup, как в

nohup kdiff3 

Это &даже необязательно, и это не зависит от bash.

0
xenoid

Ваша оболочка рабочего стола может предоставлять утилиту CLI для запуска программы с графическим интерфейсом, как если бы она была запущена из оболочки рабочего стола (я предполагаю, что утилита фактически запрашивает родительский процесс оболочки, чтобы запустить это приложение). Команда немедленно возвращается, пока открывается запущенное приложение. Вы можете закрыть терминал, не убивая запущенное приложение.

KDE / Плазма

Для оболочки KDE / Plasma утилита kstart <name_of_executable>:

kstart dolphin /var/log 

Оболочки на основе GTK

Вы можете использовать gtk-launch <base_name_of_desktop_file>:

gtk-launch firefox 

(при условии, что у вас есть firefox.desktop).

Интересно - но тогда мне придется помнить другой метод для каждого рабочего стола. (Я использую Корицу и Xfce.) Robert Pollak 6 лет назад 0
Сделайте (разные) сценарии для каждого ... xenoid 6 лет назад 0
0
Shnkc

Я использую byobuдля этого.

  1. Первый забег byobu
  2. Затем, на виртуальной вкладке byobu, запустите вашу команду
  3. Затем, даже если вы закроете терминал, так как byobuпроцесс жив, ваша команда также жива.
  4. Чтобы снова получить команду, откройте терминал, позвоните byobu. Он восстановит все виртуальные вкладки, включая ту, которая содержит вашу команду.

Похожие вопросы