Некоторые приложения с графическим интерфейсом запускаются корректно через командную строку терминала, но некоторые - нет, и они заставляют терминал ждать завершения приложения. Даже тогда некоторые не «выпускают» командную строку.
Таинственный &
суффикс амперсанда, кажется, заставляет терминал переводить процесс в фоновый режим (но я не уверен, что там происходит).
Есть ли способ запустить приложение через Терминал, чтобы не было эффекта "зависания", как запуск чего-либо через Alt+ F2?
Мне бы хотелось, чтобы снова была доступна командная строка, без чего-либо еще в фоновом режиме и печати в терминале.
command-line
gui
Peter.O
источник
источник
screen
(упомянутое Оли и RobinJ). Я впечатлен его способностями; после прочтения и проверки ... требуется только набрать:screen -d -m gedit
(илиscreen gedit
затемCtrl+a d
отключить) ... и у меня все еще есть полный доступ к терминальному представлению gedit (для предупреждающих сообщений и т. д.) в любое время,screen -r
даже если я тем временем закрыли окно оригинального терминала ...&
суффикса команды. Это может быть полезно для пояснения: в чем разница между терминалом, консолью, оболочкой и командной строкой?Ответы:
В случае с Гедитом, я просто постоянно держу копию открытой. Пока у вас запущена существующая копия, запуск
gedit
вызовов с терминала и затем закрытие терминала не убьет gedit.Что касается других вещей, то, что сказали другие люди, тоже подойдет. Я фанат
nohup
... Но если вам нужен терминал, который вы можете отсоединить, но затем подключить снова, вы хотите посмотретьscreen
.irssi
или дажеwatch uptime
буду хорошим примером.screen -r
и БУМ, ты вернулся.screen
намного больше, чем это, и вы можете объединить егоbyobu
для лучшего опыта терминала. Читать вокруг.источник
Предположим
gedit
, что программа, которую вы хотите запустить, отсоединена (она называется «отречен», «распутан», «отделен»). Существуют разные способы, в зависимости от того, что именно вы хотите сделать:Программа уже запущена
открестился:
disown -h
это путь, если вы хотите сделать это с уже запущенной программой (то есть, если вы забыли обnohup
этом). Сначала вы должны остановить это с помощью Ctrl+ Z. Затем вы можете положить в фоновом режиме, используяbg [jobId]
(напримерbg 1
). Вы получаете список запущенных заданий с их идентификаторомjobs
. После этого вы можете отделить его от терминала, используяdisown -h %[jobId]
. Пример терминальной сессии:Программа еще не запущена
поЬир
nohup
не всегда присутствует на всех машинах. Если вы знаете, что хотите отделить заранее, вы должны использовать:Может быть , вы хотите , чтобы перенаправить вывод оболочки , а также и своей программе источник входного сигнала псевдо, так:
nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Вы хотите перенаправить вывод, чтобы он не раздражал его или использовал его позже. Нулевой ввод может помочь предотвратить взлеты в ssh и тому подобное.подоболочка:
Вы можете достичь аналогичного эффекта,
Скобки открывают новую подоболочку для запуска gedit.
>/dev/null 2>&1
Перенаправляет вывод оболочки в никуда (подавляя вывод). И&
в конце ставит процесс в фоновом режиме.Терминальное мультиплексирование
Также терминальное мультиплексирование с использованием экрана или бёбу . Вы в основном запускаете программу в собственном терминале. Я действительно могу рекомендовать Бёбу и по другим причинам. Ниже приведен список сочетаний клавиш, которые могут пригодиться для ваших первых шагов:
Полезное:
Менее полезно:
'At' демон и другие
at
хороший полезный маленький инструмент для запуска команды в назначенное время. Может быть «неправильно использовано», чтобы отделить команду от оболочки:Также вы можете посмотреть
setsid
иstart-stop-daemon
, но других методов должно быть достаточно.источник
bg %1
вы могли просто напечататьbg
.Это так, и часто это то, что вы хотите. Если вы забыли использовать &, вы можете приостановить программу с помощью ctrl-z, затем поместить ее в фоновый режим с помощью команды bg - и продолжать использовать эту оболочку.
Процесс 'stdin, stdout и stderr все еще подключен к терминалу; вы можете перенаправить их из / в / dev / null или из любого другого файла (например, где-нибудь сохранить журнал вывода), по желанию:
Вы можете увидеть процесс в заданиях, вернуть его на передний план (команда fg) и отправить ему сигналы (команда kill).
Некоторые графические программы отсоединяются от терминала; если это так, то когда вы запустите команду «нормально», вы заметите, что она запускает графическую программу и «выходит».
Вот короткий скрипт , вы можете поместить его в ~ / bin , который я назвал runbg:
Я смотрю программу ($ prog) перед перенаправлением, чтобы можно было сообщать об ошибках в ее поиске. Запустите его как «runbg your-command args ...»; вы все равно можете перенаправить stdout / err в файл, если вам нужно где-то сохранить вывод.
За исключением перенаправлений и обработки ошибок, это эквивалентно ответу htorque .
источник
ctrl-z
(suspend) снова дает мне доступ к командной строке, но отключает графический интерфейс, пока я не выдам сообщение,bg
которое, похоже, не приостанавливает его. (имеет смысл) ... Есть ли другая команда, с помощью которой я могу отсоединить графический интерфейс ... Ага! Теперь я понимаю, что вы подразумеваете подsighals (kill command)
... (интересно эти сигналы) ... Я использовал фрагмент кода, чтобыdd
постепенно выводить его статистику ... и он использовалkill
+ СИГНАЛ ... Есть ли специальный СИГНАЛ для отсоединения "задания" «?disown
задания -p gedit`` и, похоже, он удалял задание .... (но я получал системные сообщения в Терминале, когда вручную закрывал gedit ... но я думаю, У меня сейчасjobs -p command
если в фоновом режиме одновременно выполняется несколько экземпляров одной команды. Вы можете использовать,jobs
чтобы найти правильный идентификатор задания, а затем сделать,jobs -p <job-id>
чтобы получить PID задания. Лично я нахожу версию с subshell намного проще. ;-)gedit & disown
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & !.
источник
disown <pid-of-command>
после запуска команды в фоновом режиме.использование
nohup
Например:
источник
nohup
? Пожалуйста, дополните.nohup
следует использовать этот сценарий.nohup
Приложение (иdisown
Баш встроенный) не позволяют сигналу достичь приложения.nohup
создает файл в текущем каталоге с именемnohup.out
. Смотрите man-страницу для более подробной информации. Я предпочитаюdisown
по этой причине и за то, чтоdisown
работает после запускаgedit
.Откройте терминал, введите экран , введите команду, которую хотите запустить, закройте терминал. Программа должна продолжаться в сеансе экрана GNU .
источник
Это сработало для меня:
источник
XDG открыть
Посмотрите на эту универсальную утилиту: https://linux.die.net/man/1/xdg-open
Это откроет относительное местоположение в вашем файловом менеджере.
Это откроет файл PDF в программе чтения PDF.
Вы даже можете предоставить веб-URL
источник
Как полагали многие люди, нужно учесть nohup. Но nohup все еще остается открытым на терминале и отображает активность программы на терминале, что раздражает. Вы можете просто закрыть терминал после этого, чтобы избежать этого. Я обнаружил очень простой обходной путь, который я использую.
Вот и все. Он открывает Gedit и закрывает терминал при запуске Gedit. Поскольку gedit сейчас не связан с терминалом, он остается активным.
источник
Это работает даже внутри скрипта (как и псевдонимы, трейлер '&' обычно не разрешен в скриптах, потому что они не интерактивны):
источник
Это сработало для меня:
источник