Как загрузить youtube-dl в фоновом режиме? Должен ли я хранить окно терминала? [dубликат]

Некоторые приложения графического интерфейса запускаются с помощью командной строки терминала.

Некоторые не делают этого, и они заставляют терминал ждать завершения приложения. ... и даже тогда некоторые из них не «освобождают» командную строку.

Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал перевести процесс в фоновый режим ... (но я не уверен, что там происходит).

Есть ли способ запустить приложение через терминал, чтобы не было эффекта «зависания»? ... так же, как запускать что-то через F2.

Я хотел бы снова открыть командную строку, сразу (без чего-то еще в фоновом режиме и записи системного сообщения в терминал).

71
задан 31 October 2010 в 14:59

80 ответов

Использовать nohup

nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу

Например:

  nohup gedit something  
20
ответ дан 3 August 2018 в 01:43

Это сработало для меня:

  $ (some-program & amp;) & gt; / dev / null # Примеры: $ (gedit & amp;) & gt; / dev /  null $ (google-chrome & amp;) & gt; / dev / null  
0
ответ дан 3 August 2018 в 01:43

Как выяснилось много людей, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я обнаружил очень простой способ, который я использую.

  nohup gedit & amp;  exit  

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку теперь gedit не связан с терминалом, он остается активным.

0
ответ дан 3 August 2018 в 01:43

Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .

4
ответ дан 3 August 2018 в 01:43

Предположим, что 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 не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы должны использовать:

  nohup gedit & amp;   

Возможно, вам также захочется перенаправить вывод оболочки, а ваша программа - на источник псевдослучайного кода, так что: nohup ./myprogram & gt; foo.out 2 & gt; bar.err & lt; / dev / null & amp; . Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh a.

Subhell:

Вы можете добиться подобного эффекта с помощью

  confus @ confusion  : ~ $ (geany 2 & amp; 1 / dev / null & amp;)  

Скобки открывают новую подоболочку для запуска gedit. 2 & amp; 1 / dev / null перенаправляет вывод оболочки в никуда (подавление вывода). И & amp; в конце ставит процесс в фоновом режиме.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или бёб . Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:

Полезно:

  • F2 Создать новое окно
  • F3 Перейти к следующему окну
  • F4 Переместить в предыдущее окно
  • F6 Отсоединить от сеанса и выйти
  • Shift-F6 Отсоединить от сеанса, но не logout
  • F7 Введите режим прокрутки / поиска
  • Ctrl-F5 Подключите все сокеты или агенты SSH / GPG

Менее полезно:

Shift-F2 Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Shift-F3 Переместить фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий раскол - Shift-F5 Свернуть все расщепления - - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите страницу назад по этому окну - Alt-Pagedown Прокрутите страницу вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -

. «De» и другие

в - хороший полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:

  echo './myprogram myoption1 myoption2' |  теперь  

Также вы можете посмотреть setsid и start-stop-daemon , но другие методы должны быть достаточными.

79
ответ дан 3 August 2018 в 01:43

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.

  firefox & amp ;!   
18
ответ дан 4 August 2018 в 03:37

Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):

  bash -i & gt; / dev /  null 2 ​​& amp; 1 & lt; & lt; nohup gedit & amp;   
0
ответ дан 4 August 2018 в 03:37

Это сработало для меня:

  $ (nohup gedit 2 & gt; / dev / null & amp;)  
1
ответ дан 4 August 2018 в 03:37

Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .

4
ответ дан 4 August 2018 в 03:37

Это сработало для меня:

  $ (some-program & amp;) & gt; / dev / null # Примеры: $ (gedit & amp;) & gt; / dev /  null $ (google-chrome & amp;) & gt; / dev / null  
0
ответ дан 4 August 2018 в 03:37

Как выяснилось много людей, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я обнаружил очень простой способ, который я использую.

  nohup gedit & amp;  exit  

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку теперь gedit не связан с терминалом, он остается активным.

0
ответ дан 4 August 2018 в 03:37

Использовать nohup

nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу

Например:

  nohup gedit something  
20
ответ дан 4 August 2018 в 03:37

Предположим, что 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 не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы должны использовать:

  nohup gedit & amp;   

Возможно, вам также захочется перенаправить вывод оболочки, а ваша программа - на источник псевдослучайного кода, так что: nohup ./myprogram & gt; foo.out 2 & gt; bar.err & lt; / dev / null & amp; . Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh a.

Subhell:

Вы можете добиться подобного эффекта с помощью

  confus @ confusion  : ~ $ (geany 2 & amp; 1 / dev / null & amp;)  

Скобки открывают новую подоболочку для запуска gedit. 2 & amp; 1 / dev / null перенаправляет вывод оболочки в никуда (подавление вывода). И & amp; в конце ставит процесс в фоновом режиме.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или бёб . Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:

Полезно:

  • F2 Создать новое окно
  • F3 Перейти к следующему окну
  • F4 Переместить в предыдущее окно
  • F6 Отсоединить от сеанса и выйти
  • Shift-F6 Отсоединить от сеанса, но не logout
  • F7 Введите режим прокрутки / поиска
  • Ctrl-F5 Подключите все сокеты или агенты SSH / GPG

Менее полезно:

Shift-F2 Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Shift-F3 Переместить фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий раскол - Shift-F5 Свернуть все расщепления - - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите страницу назад по этому окну - Alt-Pagedown Прокрутите страницу вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -

. «De» и другие

в - хороший полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:

  echo './myprogram myoption1 myoption2' |  теперь  

Также вы можете посмотреть setsid и start-stop-daemon , но другие методы должны быть достаточными.

79
ответ дан 4 August 2018 в 03:37

Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал поместить процесс в фоновый режим ... (но я не уверен, что там происходит).

Он делает, и часто то, что вы хотите. Если вы забыли использовать & 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 .

25
ответ дан 4 August 2018 в 03:37

Использовать nohup

nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу

Например:

  nohup gedit something  
20
ответ дан 5 August 2018 в 10:58

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.

  firefox & amp ;!   
18
ответ дан 5 August 2018 в 10:58

Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):

  bash -i & gt; / dev /  null 2 ​​& amp; 1 & lt; & lt; nohup gedit & amp;   
0
ответ дан 5 August 2018 в 10:58

Это сработало для меня:

  $ (nohup gedit 2 & gt; / dev / null & amp;)  
1
ответ дан 5 August 2018 в 10:58

Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .

4
ответ дан 5 August 2018 в 10:58

Это сработало для меня:

  $ (some-program & amp;) & gt; / dev / null # Примеры: $ (gedit & amp;) & gt; / dev /  null $ (google-chrome & amp;) & gt; / dev / null  
0
ответ дан 5 August 2018 в 10:58

Как выяснилось много людей, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я обнаружил очень простой способ, который я использую.

  nohup gedit & amp;  exit  

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку теперь gedit не связан с терминалом, он остается активным.

0
ответ дан 5 August 2018 в 10:58

Предположим, что 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 не всегда присутствует на всех машинах. Если вы знаете, что хотите разделить заранее, вы должны использовать:

  nohup gedit & amp;   

Возможно, вам также захочется перенаправить вывод оболочки, а ваша программа - на источник псевдослучайного кода, так что: nohup ./myprogram & gt; foo.out 2 & gt; bar.err & lt; / dev / null & amp; . Вы хотите перенаправить вывод, чтобы он не был раздражен им или использовать его позже. Нулевой вход может помочь предотвратить hickups в ssh a.

Subhell:

Вы можете добиться подобного эффекта с помощью

  confus @ confusion  : ~ $ (geany 2 & amp; 1 / dev / null & amp;)  

Скобки открывают новую подоболочку для запуска gedit. 2 & amp; 1 / dev / null перенаправляет вывод оболочки в никуда (подавление вывода). И & amp; в конце ставит процесс в фоновом режиме.

Терминальное мультиплексирование

Также терминальное мультиплексирование с использованием экрана или бёб . Вы в основном запускаете программу самостоятельно. Я действительно могу рекомендовать byobu по другим причинам. Ниже приведен список ярлыков boybu, которые могут пригодиться для ваших первых шагов:

Полезно:

  • F2 Создать новое окно
  • F3 Перейти к следующему окну
  • F4 Переместить в предыдущее окно
  • F6 Отсоединить от сеанса и выйти
  • Shift-F6 Отсоединить от сеанса, но не logout
  • F7 Введите режим прокрутки / поиска
  • Ctrl-F5 Подключите все сокеты или агенты SSH / GPG

Менее полезно:

Shift-F2 Разделить экран по горизонтали - Ctrl-F2 Сдвинуть экран по вертикали - Shift-F3 Переместить фокус на следующий раскол - Shift-F4 Переместить фокус на предыдущий раскол - Shift-F5 Свернуть все расщепления - - F5 Обновить все уведомления о состоянии - F8 Переименовать текущее окно - F9 Запустить меню настройки Byobu - F12 Экран исчезновения экрана GNU - Alt-Pageup Прокрутите страницу назад по этому окну - Alt-Pagedown Прокрутите страницу вперед по истории этого окна - Ctrl-a-! Включите или отключите все комбинации клавиш Byobu -

. «De» и другие

в - хороший полезный инструмент для запуска команды в запланированное время. Это может быть «неправильно использовано» для отсоединения команды от оболочки:

  echo './myprogram myoption1 myoption2' |  теперь  

Также вы можете посмотреть setsid и start-stop-daemon , но другие методы должны быть достаточными.

79
ответ дан 5 August 2018 в 10:58

Таинственный амперсанд «& amp;» суффикс, кажется, заставляет терминал поместить процесс в фоновый режим ... (но я не уверен, что там происходит).

Он делает, и часто то, что вы хотите. Если вы забыли использовать & 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 .

25
ответ дан 5 August 2018 в 10:58

Чтобы запустить приложение и отсоединить его от запущенного терминала, используйте & amp;!.

  firefox & amp ;!   
18
ответ дан 7 August 2018 в 04:46

Это работает даже внутри скрипта (как и псевдонимы, трейлер «& amp;» обычно не разрешен в сценариях, потому что они не являются интерактивными):

  bash -i & gt; / dev /  null 2 ​​& amp; 1 & lt; & lt; nohup gedit & amp;   
0
ответ дан 7 August 2018 в 04:46

Это сработало для меня:

  $ (nohup gedit 2 & gt; / dev / null & amp;)  
1
ответ дан 7 August 2018 в 04:46

Использовать nohup

nohup - это программа, которая запускает заданную команду с игнорируемыми сигналами зависания, так что команда может продолжать работать в фоновом режиме после его родительского процесса завершается. См. Справочную страницу

Например:

  nohup gedit something  
20
ответ дан 7 August 2018 в 04:46

Откройте терминал, введите экран , введите команду, которую вы хотите запустить, закройте терминал. Программа должна продолжать работать в сеансе GNU Screen .

4
ответ дан 7 August 2018 в 04:46

Это сработало для меня:

  $ (some-program & amp;) & gt; / dev / null # Примеры: $ (gedit & amp;) & gt; / dev /  null $ (google-chrome & amp;) & gt; / dev / null  
0
ответ дан 7 August 2018 в 04:46

Как выяснилось много людей, nohup - это то, что нужно учитывать. Но nohup stills остается открытым на терминале и отображает активность программы на терминале, который раздражает. После этого вы можете просто закрыть терминал, чтобы этого избежать. Я обнаружил очень простой способ, который я использую.

  nohup gedit & amp;  exit  

И все. Он открывает gedit и закрывает терминал при запуске gedit. Поскольку теперь gedit не связан с терминалом, он остается активным.

0
ответ дан 7 August 2018 в 04:46

Другие вопросы по тегам:

Похожие вопросы: