Как запустить GUI программы Linux с командной строки, но отдельный от командной строки?

Я искал это прежде, но никогда не мог найти ответ.

В Windows, если у меня есть открытая консоль, тип winmine, и нажмите Enter, Минный тральщик будет казаться, абсолютно отдельным от cmd программы. Экземпляр Минного тральщика не связывается с командной строкой всегда, что я знаю о, за исключением родителя Минного тральщика, устанавливаемого на тот экземпляр командной строки. Это отличается в Linux, как бы то ни было.

В Linux, если у меня есть открытая консоль, тип emacs и нажмите Enter, Emacs откроется, но это кажется связанным с командной строкой. А именно, кажется, что я не могу больше использовать командную строку, пока тот экземпляр Emacs не закрывается. Существует ли способ копировать поведение Windows в Linux?

Спасибо!

90
задан 18.08.2010, 06:22

9 ответов

В bash, detach встроенное, используемый следующим образом:

emacs &
detach %+ # or % + the number in brackets printed after the above

В zsh, Вы можете фон и отсоединение в единственной операции:

emacs &|
10
ответ дан 07.12.2019, 07:59

Добавить & к командной строке:

emacs &

Это поместит emacs в фоновом режиме и позволит Вам продолжить использовать свой терминал.

Обратите внимание, что это все еще оставит emacs как подпроцесс Вашего терминала, и когда Вы выйдете из терминала, он также выйдет из emacs. Для предотвращения этого введите:

(emacs &)

Круглые скобки говорят терминалу отсоединять процесс emacs от терминала.

Однако, stdout и сообщения stderr из программы обнаружится на терминале. Для предотвращения этого используйте:

(emacs &> /dev/null &)
109
ответ дан 07.12.2019, 07:59

Использовать nohup. Как это: nohup amarok &

Надеюсь, это поможет.

21
ответ дан 07.12.2019, 07:59

Попытайтесь ввести xemacs & открыть XEmacs в фоновом режиме.

Не называйте это "эмуляцией поведения Windows". Ай.

Вы могли также:

  • Откройте новый терминал
  • Используйте Alt+F2 или Ваш менеджер окон для запуска программы, вместо того, чтобы использовать терминал
  • Используйте экран GNU
9
ответ дан 07.12.2019, 07:59
command &

Поместите амперсанд после команды.

3
ответ дан 07.12.2019, 07:59

при использовании удара можно отрицать процесс:

% firefox &
% disown 
3
ответ дан 07.12.2019, 07:59

просто использование & как в $ x & оставляет процесс подключенным к терминалу, я забрал названную небольшую программу detach http://inglorion.net/software/detach/, который я исказил как d это немного похоже nohup но не оставляет позади файл журнала, я использую его для отсоединения mupdf: d mupdf x.pdf

0
ответ дан 07.12.2019, 07:59

Я вставил следующий код исполняемый файл сценария, названный "sbg" для "тихого фона". Это делает все необходимые вещи полностью разъединить программу, запускаемую с оболочки: перенаправления stdin, stdout и stderr из/в /dev/null, игнорирует зависания, выполнения в фоне и отсоединения.

#!/bin/bash
nohup "$@" &>/dev/null & disown %%

Затем можно просто сделать sbg emacs. Можно также передать любые аргументы, Вы хотите: sbg emacs --daemon FILE1 FILE2.

7
ответ дан 07.12.2019, 07:59

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


Следующие работы:

$ (gui_app &> /dev/null &)

Это - ответ Nathan Fellman плюс перенаправление.

"и>/dev/null" перенаправляет и stdout и stderr к пустому устройству. Последний амперсанд делает процесс выполненным в фоновом режиме. Круглые скобки вокруг команды заставят Ваш "gui_app" работать в подоболочке.

Выполнение этого отсоединит процесс "gui_app" от консоли, от которой Вы выполняете эту команду. Таким образом, даже если Вы закрываетесь, родительский эмулятор терминала окна работает в, "gui_app" не закроется. Я работал, это затем посмотрело на дерево процесса с командой "pstree" и нашло применение, запустился, этот путь станет дочерним процессом к "init".

Например,

$ gui_app &> /dev/null &

запустит приложение в фоновом режиме, но это станет дочерним процессом консольного процесса и завершится при закрытии терминала. (Хотя выход из терминала через удар при помощи команды выхода или Ctrl-D позволит удару вымыться путем передачи фонового процесса к init.)

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

$ gui_app &
$ disown

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

Некоторая ссылка: Отрицание Процессов (Электроинструменты UNIX)

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

Примечание: CarlF в комментариях другого потока сообщает, что приложения для GUI, запущенные через "gui_app и" метод, не закрываются, когда он выходит от родительского терминала. Я думаю, что мы закрывали терминал по-разному. Я закрывал окно, в котором работал эмулятор терминала. Я думаю, что он, возможно, выходил из эмулятора терминала через оболочку (команда выхода или Ctrl-D). Я протестировал это и видел, что выход через удар не останавливает GUI, запущенный как фоновый процесс терминала, как заявляет CarlF. Кажется ударом руки прочь от фоновых процессов к init, когда этому дают шанс вымыться. На самом деле это должно быть механизмом, которым фоновый процесс, запущенный в подоболочке, передан к init.

19
ответ дан 07.12.2019, 07:59

Как в других ответах говорится, можно использовать следующее:

$ emacs &

Если Вы забываете & хотя, просто нажмите Ctrl-z затем используйте bg:

[1]+  Stopped                 emacs
$ bg
[1]+ emacs &
$

К ВАШЕМУ СВЕДЕНИЮ: Ctrl-z останавливает процесс emacs и bg отправляет в фон.

1
ответ дан 07.12.2019, 07:59

util-linux включает в себя инструмент под названием setsid, который в основном делает то, что делает отсоединение:

$ setsid someprogram

Это запустит сомпрограмму в новой сессии.

.
11
ответ дан 07.12.2019, 07:59

Теги

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