4

Я хотел бы найти это, но я не знаю, как сформулировать это для поисковой системы ..

По сути, когда я запускаю программу графического интерфейса из окна терминала, этот терминал не может быть использован в дальнейшем, пока я не выйду из программы. Я только начал использовать dwm, и я не хочу, чтобы после запуска нескольких графических программ валялись бесполезные терминалы. Есть ли способ обойти это?

6 ответов6

10

Каждый, кто говорит «&», прав. Если вы забыли, введите ^ Z (ctrl+Z), чтобы приостановить программу, а затем "bg", чтобы указать оболочке запустить ее в фоновом режиме. Это делает оболочку полностью интерактивной, как будто вы запустили программу с «&».

5

Я понимаю, что это старая ветка, но я помню, как нашел более сложное решение, чем перечисленные здесь.

$ (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", но по умолчанию перенаправляет вывод и ошибку в файл. Команда disown (если она доступна в оболочке) может отсоединить процесс от терминала после того, как вы запустили фоновый процесс:

$ gui_app &
$ disown

(Кстати, все это относится к Bash. Я уверен, что другие оболочки имеют другие методы / синтаксис для этого.)

Подобные вопросы и ответы суперпользователя - может быть, где я помню некоторые ответы: ... запускать программы с графическим интерфейсом Linux из командной строки, но отдельно от командной строки?

Некоторая справка:Отказ от процессов (UNIX Power Tools)

Если это простой вызов приложения с графическим интерфейсом - без сложных опций и тому подобного - кажется, что использование средства запуска, такого как "gmrun" или dmenu (предупреждение: громкий звук), также является хорошим вариантом. Свяжите это с комбинацией клавиш. Я пока не пользуюсь лаунчером, но попробовал эти два.

ПРИМЕЧАНИЕ. CarlF в комментариях сообщает, что приложения с графическим интерфейсом, запущенные с помощью метода gui_app &, не закрываются при выходе из родительского терминала. Я думаю, что мы закрывали терминал по-разному. Я закрывал окно, в котором работал эмулятор терминала. Я думаю, что он, возможно, выходил из эмулятора терминала через оболочку (команда выхода или Ctrl-D). Я проверил это и увидел, что выход через bash не останавливает запуск GUI как фонового процесса терминала, как говорит CarlF. Кажется, что bash передает фоновые процессы инициализации, когда ему дают возможность очистить. Фактически, это должен быть механизм, с помощью которого фоновый процесс, запущенный в подоболочке, передается init.

3

Вам нужно запустить приложение в фоновом режиме, как это:

# xeyes &

Символ & указывает, что приложение должно запускаться в фоновом режиме.

1

Поставьте после команды амперсанд (&), и он будет помещен в фоновом режиме, что позволит вам использовать терминал, например:

nautilus /home/john&
0

пытаться

$>FooBargGui &

Это заставит оболочку запустить процесс / GUI FooBarGui в качестве фонового процесса и немедленно вернуться к приглашению.

0

Вы, вероятно, захотите перенаправить любой вывод команды в /dev /null, а также фоновый режим. IIRC:

command > /dev/null 2>&1 &

Когда я использовал КПК Sharp Zaurus под управлением Linux (а во IIRC я использовал менеджер окон OpenBox), у меня был файл bash, который я назвал q, для «ставить в очередь быстро, тихо». Затем вы можете бежать, сказать:

q mycommand param1 param2

Я считаю, что так работал скрипт:

#!/bin/bash

$@ > /dev/null 2>&1 &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .