Я искал это прежде, но никогда не мог найти ответ.
В Windows, если у меня есть открытая консоль, тип winmine
, и нажмите Enter, Минный тральщик будет казаться, абсолютно отдельным от cmd программы. Экземпляр Минного тральщика не связывается с командной строкой всегда, что я знаю о, за исключением родителя Минного тральщика, устанавливаемого на тот экземпляр командной строки. Это отличается в Linux, как бы то ни было.
В Linux, если у меня есть открытая консоль, тип emacs
и нажмите Enter, Emacs откроется, но это кажется связанным с командной строкой. А именно, кажется, что я не могу больше использовать командную строку, пока тот экземпляр Emacs не закрывается. Существует ли способ копировать поведение Windows в Linux?
Спасибо!
Добавить &
к командной строке:
emacs &
Это поместит emacs в фоновом режиме и позволит Вам продолжить использовать свой терминал.
Обратите внимание, что это все еще оставит emacs как подпроцесс Вашего терминала, и когда Вы выйдете из терминала, он также выйдет из emacs. Для предотвращения этого введите:
(emacs &)
Круглые скобки говорят терминалу отсоединять процесс emacs от терминала.
Однако, stdout и сообщения stderr из программы обнаружится на терминале. Для предотвращения этого используйте:
(emacs &> /dev/null &)
Попытайтесь ввести xemacs &
открыть XEmacs в фоновом режиме.
Не называйте это "эмуляцией поведения Windows". Ай.
Вы могли также:
просто использование &
как в $ x &
оставляет процесс подключенным к терминалу, я забрал названную небольшую программу detach
http://inglorion.net/software/detach/, который я исказил как d
это немного похоже nohup
но не оставляет позади файл журнала, я использую его для отсоединения mupdf: d mupdf x.pdf
Я вставил следующий код исполняемый файл сценария, названный "sbg" для "тихого фона". Это делает все необходимые вещи полностью разъединить программу, запускаемую с оболочки: перенаправления stdin, stdout и stderr из/в /dev/null
, игнорирует зависания, выполнения в фоне и отсоединения.
#!/bin/bash
nohup "$@" &>/dev/null & disown %%
Затем можно просто сделать sbg emacs
. Можно также передать любые аргументы, Вы хотите: sbg emacs --daemon FILE1 FILE2
.
Я отправил ответ на более старый поток подобной темы с ответами из различных источников. Следующее является копией того ответа, адаптированного к этому потоку.
Следующие работы:
$ (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.
Как в других ответах говорится, можно использовать следующее:
$ emacs &
Если Вы забываете &
хотя, просто нажмите Ctrl-z
затем используйте bg
:
[1]+ Stopped emacs
$ bg
[1]+ emacs &
$
К ВАШЕМУ СВЕДЕНИЮ: Ctrl-z
останавливает процесс emacs и bg
отправляет в фон.
util-linux включает в себя инструмент под названием setsid, который в основном делает то, что делает отсоединение:
$ setsid someprogram
Это запустит сомпрограмму
в новой сессии.