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

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

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

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

спасибо!

8
задан Jason
11.02.2023 4:13 Количество просмотров материала 3633
Распечатать страницу

13 ответов

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

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

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

emacs &|
9
отвечен geekosaur 2023-02-12 12:01

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

emacs &

это поставит emacs в фоновом режиме и позволит вам продолжать использовать ваш терминал.

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

(emacs &)

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

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

(emacs &> /dev/null &)
105
отвечен Nathan Fellman 2023-02-12 14:18

использовать nohup. Примерно так:nohup amarok &

надеюсь, что это помогает.

19
отвечен NawaMan 2023-02-12 16:35

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


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

$ (gui_app &> /dev/null &)

Это ответ Натана Феллмана плюс перенаправление.

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

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

например,

$ gui_app &> /dev/null &

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

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

$ gui_app &
$ disown

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

ссылка: процессы отключения (Unix Power Tools)

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

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

18
отвечен EMPraptor 2023-02-12 18:52

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

$ setsid someprogram

будет выполняться someprogram в новом сеансе.

10
отвечен tonybaldwin 2023-02-12 21:09

попробуйте ввести xemacs &, чтобы открыть XEmacs в фоновом режиме.

пожалуйста, не называйте это"эмуляцией поведения Windows". Ой.

вы можете также:

  • открыть новый терминал
  • используйте Alt+F2 или ваш оконный менеджер для запуска программы, а не через терминал
  • используйте GNU Screen
9
отвечен Borealid 2023-02-12 23:26

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

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

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

7
отвечен Ryan Thompson 2023-02-13 01:43
command &

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

3
отвечен Jesse Dhillon 2023-02-13 04:00

Если вы используете bash, вы можете отказаться от процесса:

% firefox &
% disown 
3
отвечен JeffG 2023-02-13 06:17

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

$ emacs & disown
2
отвечен Idham Perdameian 2023-02-13 08:34

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

$ emacs &

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

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

FYI:Ctrl-z останавливает процесс emacs и bg отправляет в фоновом режиме.

1
отвечен MatthewD 2023-02-13 10:51

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

0
отвечен Dan D. 2023-02-13 13:08

положите это в ~/.bashrc:

debug_trap_skip()
{
    local cmd_type=$(type -t "")

    # Empty cmd_type is for inexistent command or variable definition, exclude them
    # and shell builtins except echo, set and env:
    [[ -z "$cmd_type" || "$cmd_type" = builtin && "" != echo && "" != set && "" != env ]] &&
        return 0

    return 1
}

debug_trap_x11()
{
    if ldd `which `|grep -q libX11
    then
        setsid "$@"
        return 0
    fi
    return 1
}

debug_trap()
{
    [[ -n "$COMP_LINE" ]] && return  # do nothing if completing
    [[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ]] && return
    debug_trap_skip $BASH_COMMAND && return 0
    debug_trap_x11 $BASH_COMMAND && return 1

    return 0
}

shopt -s extdebug
trap debug_trap DEBUG

теперь вам не нужно запоминать, какие программы X11, и делать для них специальные манипуляции, потому что они будут отсоединяться автоматически. Обратите внимание, что setsid лучше, чем nohup, потому что последний блокирует сигнал HUP, который не то, что вам нужно.

P. S. А вы winmine-ready в Linux.

0
отвечен midenok 2023-02-13 15:25

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх