Некоторые приложения графического интерфейса запускаются с помощью командной строки терминала.
Некоторые не делают этого, и они заставляют терминал ждать завершения приложения. ... и даже тогда некоторые из них не «освобождают» командную строку.
Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).
Есть ли способ запустить приложение через терминал, чтобы не было эффекта «зависания»? ... так же, как запускать что-то через F2.
Я хотел бы снова открыть командную строку, сразу (без чего-то еще в фоновом режиме и записи системного сообщения в терминал).
Использовать nohup
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу
blockquote>Например:
nohup gedit something
Это сработало для меня:
$ (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 не связан с терминалом, он остается активным.
Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .
Предположим, что 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;!.
firefox & amp ;!
Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):
bash -i & gt; / dev / null 2 & amp; 1 & lt; & lt; nohup gedit & amp;
Это сработало для меня:
$ (nohup gedit 2 & gt; / dev / null & amp;)
Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе 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 не связан с терминалом, он остается активным.
Использовать nohup
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу
blockquote>Например:
nohup gedit something
Предположим, что 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
nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу
blockquote>Например:
nohup gedit something
Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.
firefox & amp ;!
Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):
bash -i & gt; / dev / null 2 & amp; 1 & lt; & lt; nohup gedit & amp;
Это сработало для меня:
$ (nohup gedit 2 & gt; / dev / null & amp;)
Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе 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 ;!
Это работает даже внутри скрипта (как и псевдонимы, трейлер «& 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
Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе 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 не связан с терминалом, он остается активным.