Некоторые приложения графического интерфейса запускаются с помощью командной строки терминала.
Некоторые не делают этого, и они заставляют терминал ждать завершения приложения. ... и даже тогда некоторые из них не «освобождают» командную строку.
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).
Есть ли способ запустить приложение через терминал, чтобы не было эффекта «зависания»? ... так же, как запускать что-то через F2.
Я хотел бы снова открыть командную строку, сразу (без чего-то еще в фоновом режиме и записи системного сообщения в терминал).
Предположим, что gedit
- программа, которую вы хотите запустить отдельно (aka. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:
disown -h
is путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup
). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId]
(например, bg 1
). Вы получаете список текущих заданий с их jobId с помощью заданий
. После этого вы можете отделить его от терминала, используя disown -h% [jobId]
. Пример терминальной сессии:
confus @ confusion: ~ $ gedit ^ Z [1] + Остановлен gedit confus @ confusion: ~ $ jobs [1] + Остановлен gedit confus @ confusion: ~ $ bg 1 [1] + gedit & amp; confus @ confusion: ~ $ disown -h% 1 confus @ confusion: ~ $ exit
nohup
не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы должны использовать:
nohup gedit & amp;
Возможно, вам также захочется перенаправить вывод оболочки, а ваша программа - на источник псевдослучайного кода, так что: nohup ./myprogram & gt; foo.out 2 & gt; bar.err & lt; / dev / null & amp;
. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh a.
Вы можете добиться подобного эффекта с помощью
confus @ confusion : ~ $ (geany 2 & amp; 1 / dev / null & amp;)
Скобки открывают новую подоболочку для запуска gedit. 2 & amp; 1 / dev / null
перенаправляет вывод оболочки в никуда (подавление вывода). И & amp;
в конце ставит процесс в фоновом режиме.
Также терминальное мультиплексирование с использованием экрана или бёб . Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:
Полезно:
Менее полезно:
Shift-F2 Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Shift-F3 Переместить фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий раскол - Shift-F5 Свернуть все расщепления - - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите страницу назад по этому окну - Alt-Pagedown Прокрутите страницу вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -
в
- хороший полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:
echo './myprogram myoption1 myoption2' | теперь
Также вы можете посмотреть setsid
и start-stop-daemon
, но другие методы должны быть достаточными.
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал поместить процесс в фоновый режим ... (но я не уверен, что там происходит).
blockquote>Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):
some-program & lt; / dev / null & amp; gt; / dev / null & amp; # & amp; & gt; файл является bash для 1 & gt; файл 2 & amp; 1
Вы можете увидеть процесс в заданиях, вернуть его на передний план (команда fg) и отправить его сигналы (команда kill).
Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «обычно», вы заметите, что она запускает графическую программу и «завершает».
Вот короткий script , вы можете поместить его в ~ / bin , который я назвал runbg:
#! / bin / bash [$ # -eq 0] & Amp; & Amp; {# $ # - количество аргументов args echo "$ (basename $ 0): отсутствует команда" & gt; & amp; 2 exit 1} prog = "$ (который" $ 1 ")" # см. ниже [-z "$ prog"] & amp; ; & амп; {echo "$ (basename $ 0): неизвестная команда: $ 1" & gt; & amp; 2 exit 1} shift # удалить $ 1, теперь $ prog, из args tty -s & amp; & amp; & amp; exec & lt; / dev / null #, если stdin является терминалом, перенаправление с нулевого tty -s & amp; 1 & amp; & amp; exec & gt; / dev / null #, если stdout является терминалом, перенаправляет на null tty -s & amp; 2 & amp; & amp; exec 2 & gt; 1 # stderr в stdout (который может быть не равен нулю) "$ prog" "$ @" & amp; # $ @ - все args
Я просматриваю программу ($ prog) перед перенаправлением, поэтому можно сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.
За исключением перенаправления и обработки ошибок, это эквивалентно ответу htorque .
Это сработало для меня:
$ (nohup gedit 2 & gt; / dev / null & amp;)
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.
firefox & amp ;!
Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):
bash -i & gt; / dev / null 2 & amp; 1 & lt; & lt; nohup gedit & amp;
Использовать nohup
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу
blockquote>Например:
nohup gedit something
Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .
Это сработало для меня:
$ (some-program & amp;) & gt; / dev / null # Примеры: $ (gedit & amp;) & gt; / dev / null $ (google-chrome & amp;) & gt; / dev / null
Как выяснилось много людей, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я обнаружил очень простой способ, который я использую.
nohup gedit & amp; exit
И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку теперь gedit не связан с терминалом, он остается активным.
Предположим, что gedit
- программа, которую вы хотите запустить отдельно (aka. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:
disown -h
is путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup
). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId]
(например, bg 1
). Вы получаете список текущих заданий с их jobId с помощью заданий
. После этого вы можете отделить его от терминала, используя disown -h% [jobId]
. Пример терминальной сессии:
confus @ confusion: ~ $ gedit ^ Z [1] + Остановлен gedit confus @ confusion: ~ $ jobs [1] + Остановлен gedit confus @ confusion: ~ $ bg 1 [1] + gedit & amp; confus @ confusion: ~ $ disown -h% 1 confus @ confusion: ~ $ exit
nohup
не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы должны использовать:
nohup gedit & amp;
Возможно, вам также захочется перенаправить вывод оболочки, а ваша программа - на источник псевдослучайного кода, так что: nohup ./myprogram & gt; foo.out 2 & gt; bar.err & lt; / dev / null & amp;
. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh a.
Вы можете добиться подобного эффекта с помощью
confus @ confusion : ~ $ (geany 2 & amp; 1 / dev / null & amp;)
Скобки открывают новую подоболочку для запуска gedit. 2 & amp; 1 / dev / null
перенаправляет вывод оболочки в никуда (подавление вывода). И & amp;
в конце ставит процесс в фоновом режиме.
Также терминальное мультиплексирование с использованием экрана или бёб . Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:
Полезно:
Менее полезно:
Shift-F2 Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Shift-F3 Переместить фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий раскол - Shift-F5 Свернуть все расщепления - - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите страницу назад по этому окну - Alt-Pagedown Прокрутите страницу вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -
в
- хороший полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:
echo './myprogram myoption1 myoption2' | теперь
Также вы можете посмотреть setsid
и start-stop-daemon
, но другие методы должны быть достаточными.
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал поместить процесс в фоновый режим ... (но я не уверен, что там происходит).
blockquote>Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):
some-program & lt; / dev / null & amp; gt; / dev / null & amp; # & amp; & gt; файл является bash для 1 & gt; файл 2 & amp; 1
Вы можете увидеть процесс в заданиях, вернуть его на передний план (команда fg) и отправить его сигналы (команда kill).
Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «обычно», вы заметите, что она запускает графическую программу и «завершает».
Вот короткий script , вы можете поместить его в ~ / bin , который я назвал runbg:
#! / bin / bash [$ # -eq 0] & Amp; & Amp; {# $ # - количество аргументов args echo "$ (basename $ 0): отсутствует команда" & gt; & amp; 2 exit 1} prog = "$ (который" $ 1 ")" # см. ниже [-z "$ prog"] & amp; ; & амп; {echo "$ (basename $ 0): неизвестная команда: $ 1" & gt; & amp; 2 exit 1} shift # удалить $ 1, теперь $ prog, из args tty -s & amp; & amp; & amp; exec & lt; / dev / null #, если stdin является терминалом, перенаправление с нулевого tty -s & amp; 1 & amp; & amp; exec & gt; / dev / null #, если stdout является терминалом, перенаправляет на null tty -s & amp; 2 & amp; & amp; exec 2 & gt; 1 # stderr в stdout (который может быть не равен нулю) "$ prog" "$ @" & amp; # $ @ - все args
Я просматриваю программу ($ prog) перед перенаправлением, поэтому можно сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.
За исключением перенаправления и обработки ошибок, это эквивалентно ответу htorque .
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.
firefox & amp ;!
disown & lt; pid-of-command & gt;
после запуска команды в фоновом режиме.
– htorque
31 October 2010 в 16:29
Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):
bash -i & gt; / dev / null 2 & amp; 1 & lt; & lt; nohup gedit & amp;
Это сработало для меня:
$ (nohup gedit 2 & gt; / dev / null & amp;)
Использовать nohup
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу
blockquote>Например:
nohup gedit something
nohup
следует использовать в этом сценарии.
– boehj
31 May 2011 в 17:26
nohup
(и отключено
bash) не позволяет сигналу достичь приложения.
– enzotib
31 May 2011 в 17:33
nohup
создает файл в текущем каталоге с именем nohup.out
. Для получения дополнительной информации см. Справочную страницу . Поэтому я предпочитаю отказаться от
и за то, что disown
работает после запуска gedit
.
– Flimm
31 May 2011 в 19:17
Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .
Это сработало для меня:
$ (some-program & amp;) & gt; / dev / null # Примеры: $ (gedit & amp;) & gt; / dev / null $ (google-chrome & amp;) & gt; / dev / null
Как выяснилось много людей, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я обнаружил очень простой способ, который я использую.
nohup gedit & amp; exit
И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку теперь gedit не связан с терминалом, он остается активным.
Предположим, что gedit
- программа, которую вы хотите запустить отдельно (aka. «disown», «disentangle», «disouple»). Существуют разные способы в зависимости от того, что вы хотите сделать точно:
disown -h
is путь, если вы хотите сделать это с уже запущенной программой (т. е. если вы забыли nohup
). Сначала вам нужно остановить его, используя Ctrl + Z. Затем вы можете вставить в скобку с помощью bg [jobId]
(например, bg 1
). Вы получаете список текущих заданий с их jobId с помощью заданий
. После этого вы можете отделить его от терминала, используя disown -h% [jobId]
. Пример терминальной сессии:
confus @ confusion: ~ $ gedit ^ Z [1] + Остановлен gedit confus @ confusion: ~ $ jobs [1] + Остановлен gedit confus @ confusion: ~ $ bg 1 [1] + gedit & amp; confus @ confusion: ~ $ disown -h% 1 confus @ confusion: ~ $ exit
nohup
не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы должны использовать:
nohup gedit & amp;
Возможно, вам также захочется перенаправить вывод оболочки, а ваша программа - на источник псевдослучайного кода, так что: nohup ./myprogram & gt; foo.out 2 & gt; bar.err & lt; / dev / null & amp;
. Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh a.
Вы можете добиться подобного эффекта с помощью
confus @ confusion : ~ $ (geany 2 & amp; 1 / dev / null & amp;)
Скобки открывают новую подоболочку для запуска gedit. 2 & amp; 1 / dev / null
перенаправляет вывод оболочки в никуда (подавление вывода). И & amp;
в конце ставит процесс в фоновом режиме.
Также терминальное мультиплексирование с использованием экрана или бёб . Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:
Полезно:
Менее полезно:
Shift-F2 Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Shift-F3 Переместить фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий раскол - Shift-F5 Свернуть все расщепления - - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите страницу назад по этому окну - Alt-Pagedown Прокрутите страницу вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -
в
- хороший полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:
echo './myprogram myoption1 myoption2' | теперь
Также вы можете посмотреть setsid
и start-stop-daemon
, но другие методы должны быть достаточными.
bg% 1
вы можете просто ввести bg
.
– MasterMastic
15 March 2016 в 16:51
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал поместить процесс в фоновый режим ... (но я не уверен, что там происходит).
blockquote>Он делает, и часто то, что вы хотите. Если вы забыли использовать & amp ;, вы можете приостановить программу с помощью ctrl-z, затем поместите ее в фоновом режиме с помощью команды bg и продолжите использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключены к терминалу; вы можете перенаправить их из / в / dev / null или любой другой файл (например, сохранить выходной журнал где-нибудь):
some-program & lt; / dev / null & amp; gt; / dev / null & amp; # & amp; & gt; файл является bash для 1 & gt; файл 2 & amp; 1
Вы можете увидеть процесс в заданиях, вернуть его на передний план (команда fg) и отправить его сигналы (команда kill).
Некоторые графические программы будут отсоединены от терминала; если это так, когда вы запускаете команду «обычно», вы заметите, что она запускает графическую программу и «завершает».
Вот короткий script , вы можете поместить его в ~ / bin , который я назвал runbg:
#! / bin / bash [$ # -eq 0] & Amp; & Amp; {# $ # - количество аргументов args echo "$ (basename $ 0): отсутствует команда" & gt; & amp; 2 exit 1} prog = "$ (который" $ 1 ")" # см. ниже [-z "$ prog"] & amp; ; & амп; {echo "$ (basename $ 0): неизвестная команда: $ 1" & gt; & amp; 2 exit 1} shift # удалить $ 1, теперь $ prog, из args tty -s & amp; & amp; & amp; exec & lt; / dev / null #, если stdin является терминалом, перенаправление с нулевого tty -s & amp; 1 & amp; & amp; exec & gt; / dev / null #, если stdout является терминалом, перенаправляет на null tty -s & amp; 2 & amp; & amp; exec 2 & gt; 1 # stderr в stdout (который может быть не равен нулю) "$ prog" "$ @" & amp; # $ @ - все args
Я просматриваю программу ($ prog) перед перенаправлением, поэтому можно сообщить об ошибках в ее местонахождении. Запустите его как «runbg your-command args ...»; вы можете перенаправить stdout / err в файл, если вам нужно где-то сохранить выход.
За исключением перенаправления и обработки ошибок, это эквивалентно ответу htorque .
ctrl-z
(suspend) снова возвращает мне доступ к командной строке, но затушевывает GUI, пока я не выдаю bg
, который кажется отменить его. (имеет смысл) ... Есть еще одна команда, с помощью которой я могу отсоединить графический интерфейс ... Ага! Теперь я понимаю, что вы подразумеваете под sighals (kill command)
... (интересные вещи эти сигналы). Я использовал фрагмент кода, чтобы сделать dd
постепенно выводить его статистику. и он использовал kill
+ a СИГНАЛ ... Есть ли специальный СИГНАЛ для отсоединения «задания»?
– Peter.O
31 October 2010 в 16:41
отменить
задания -p gedit`` и, похоже, удалить работу ... (но я получил системные сообщения в терминале, когда я вручную закрытый gedit ... но я думаю, что на данный момент у меня есть прикрученный терминал ... слишком много экспериментирует :(
– Peter.O
31 October 2010 в 16:51
jobs -p command
, если у вас есть несколько экземпляров одной команды, работающей в фоновом режиме за раз. вы можете использовать jobs
, чтобы найти правильный идентификатор задания, а затем выполнить задания -p & lt; job-id & gt;
, чтобы получить PID задания. Лично я считаю, что версия с подоболочкой намного проще. ;-)
– htorque
31 October 2010 в 17:22
gedit & amp; открестился
– user
31 October 2010 в 17:32