Можно ли продолжить сеанс ssh при каждом повторном подключении? [dубликат]

Это оказалось проблемой с настройками видеокарты. Я выполнил редактор конфигурации для видеокарты. В этом случае, выполнив

gksu nvidia-settings

, я должен был включить второй монитор и перезапустить xwindows и выполнить его работу.

530
задан 21 October 2010 в 17:09

92 ответа

Экран и nohup - лучший способ, но если вам нужно отключить уже запущенный процесс без экрана или nohup, вы можете запустить команду disown.

disown [-ar] [ -h] [ jobspec ... | pid ...]

Без options, удалите каждый jobspec из таблицы активных заданий. Если задана опция -h , задание не удаляется из таблицы, но помечено так, что SIGHUP не отправляется на задание, если оболочка получает SIGHUP. Если jobspec отсутствует, и ни опция -a , ни опция -r не используются, используется текущее задание. Если не задано jobspec , опция -a означает удаление или отметку всех заданий; параметр -r без аргумента jobspec ограничивает выполнение выполняемых заданий.

С отключением вы можете закрыть терминал и получить процесс работающий на машине.

72
ответ дан 7 August 2018 в 18:34

Эй, пока я согласился, что экран является наиболее эффективным вариантом. Вы можете использовать vncserver, а затем запустить процесс на нем.

Кроме того, если ваши единственные проблемы состоят в том, чтобы запустить процесс и не нужно брать его обратно, и, самое главное, вы не знали, что будете нужно закрыть сеанс, и у вас уже запущен процесс, вам не повезло, если вы использовали bash в качестве оболочки

Сначала вам нужно отправить процесс на задний план, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко вытащить список с помощью заданий команды)

Наконец, вызывается команда disown (за ней следует jobid ... так же, как и с bg)

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

7
ответ дан 7 August 2018 в 18:34

В то время как все говорят использовать disown (единственный вариант, который у вас есть после того, как вы уже начали процесс), nohup или даже запустить команду на экране ! d2], что полезно, если вы хотите увидеть весь вывод из команды ... Я поклонник экрана .. Я все еще пробовал самые последние основные дистрибутивы Linux и просто поставил работа в фоновом режиме и прекращение работы не приводит к тому, что все процессы, которые работают, умирают. Должна быть глобальная установка или что-то еще. Я пытаюсь это на некоторых довольно старых системах (slackware 12), и мой тестовый скрипт продолжает работать до тех пор, пока я не рунет его вручную:

  shell $ cat & gt;  test.pl #! / usr / bin / perl while (1) {sleep (1);  } shell $ perl ./test.pl & amp;  shell $ exit logout shell $ ps aux test.pl mymom 31337 1 0 13:25?  00:00:00 perl ./test.pl shell $  

Хотя я согласен, что экран был бы лучшим способом запустить это, даже если бы мой скрипт написал чтобы записывать файлы или что-то в этом роде. Мне никогда не приходилось использовать disown -a или nohup , если он не был полностью паранойей. Может быть, кто-то может пролить свет на то, как bash ведет себя по умолчанию? Может быть, некоторые системные администраторы меняют значения по умолчанию на больших оболочках, чтобы процессы своих пользователей перегружали систему?

178
ответ дан 7 August 2018 в 18:34

Самый простой способ - запустить команду в фоновом режиме с помощью & amp; . Затем просто напишите:

  disown -a  
2
ответ дан 7 August 2018 в 18:34

Я застрял в большом mv, поэтому я не мог остановить процесс, настроить экран и снова запустить его. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие шаги:

  1. ssh [server]
  2. command
  3. CTRL + Z
  4. bg
  5. disown
  6. exit

Шаг 3 приостанавливает текущий процесс (например, моя команда «mv»). Шаг 4 ставит приостановленный процесс на задний план и возобновляет его. Шаг 5 позволяет отказаться от процесса.

36
ответ дан 7 August 2018 в 18:34

Самый лучший способ - это самый простой способ.

nohup long-running-command & amp;

Это было сделано специально для этого, оно даже записывает stdout в nohup.log

man nohup

Если вы хотите «зафрахтовать» некоторые уже запущенные задачи, то лучший выбор - ctrl + z, затем запустите

bg (это будет зависеть от вашей последней приостановленной задачи, позволяющей ей продолжать работать)

, тогда быстрое disout должно поддерживать процесс после выхода из системы.

screen и другие могут это сделать, но это не то, для чего они предназначены. Я рекомендую nohup для задач, которые, как вы знаете, собираетесь оставить, и bg для задач, которые вы уже выполняете, и не хотите повторно запускать.

Имейте в виду, что оба имеют значение bash. Если вы не используете bash, тогда команды могут быть разными.

210
ответ дан 7 August 2018 в 18:34

Вместо:

  cmd options;   

Добавить до nohup :

  nohup cmd options & amp;   

Затем вы сможете увидеть консольный stdout:

  tail -f nohup.out  
-1
ответ дан 7 August 2018 в 18:34

Для одного сценария оболочки, который у меня запущен в течение длительного периода времени, я войду в систему и запустил процесс в фоновом режиме, используя «& amp;».

Пример:

  / path / to / my / script & amp;   

Я вышел из системы и отключил сеанс SSH. Когда я вхожу в систему через некоторое время, сценарий все еще выполняется, как доказано непрерывным сбором данных из сценария.

7
ответ дан 10 August 2018 в 07:14

Вы не можете сделать это после того, как процесс начался, вам нужно настроить все, прежде чем запускать долгое задание.

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

Экран имеет то преимущество, что вы можете отсоединиться от одной машины и снова подключиться к другой, что удобно, если вы хотите проверить длительные процессы, которые выходят за пределы рабочего дня.

] Существует разумное начало руководства к экрану здесь.

byobu предоставляет простой в использовании интерфейс поверх экрана с меню и т. Д. Это также текущая реализация экрана на более новой ubuntu. F2 для запуска нового терминала F3 / F4 для переключения взад и вперед и F6 для разъединения. Навсегда выйдите на конечные терминалы.

16
ответ дан 10 August 2018 в 07:14

Вы должны проверить экран GNU и посмотреть, поможет ли он вам. В зависимости от того, как вам нужно приложение для запуска в режиме реального времени, это может вызвать больше проблем, чем оно решает, но по крайней мере это позволит вам возобновить сеанс, как будто вы его никогда не покидали.

Как использовать:

  • Используйте команду screen для первого запуска, прокрутите вводные сообщения, вам нужно передать терминал.
  • Ca Cc открывает другое терминал
  • Ca Ck убивает терминал
  • Вы можете использовать Ca C-Space и Ca C-Backspace для циклического перехода через терминалы
  • Ca Ca удобен, re в основном используя только два терминала
  • Ca Cd отсоединяет текущий сеанс экрана и выходит из экранов. Затем вы можете использовать экран -r для возобновления этого сеанса. У вас может быть несколько сеансов отдельного экрана одновременно, в этом случае вы увидите список доступных сеансов.

Существует много других опций, например разделенные экраны, а также все ярлыки полностью настраиваются.

3
ответ дан 10 August 2018 в 07:14

Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала через несколько соединений ssh. Это экран (действующий, но, к сожалению, не имеющий силы. По-видимому, активно развивается теперь ) и tmux (более новый, активно поддерживается). Byobu - это интерфейс, который может работать поверх их этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве бэкэнд, если у вас установлена ​​более старая установка byobu и существующая конфигурация, она будет поддерживать предыдущий бэкэнд, будь то экран или tmux.

Byobu

Byobu можно установить на компьютер, выполнив это на машине на базе Debian:

  sudo aptitude install byobu  

Используя yum, вы делаете

  su -c 'yum install byobu'  

Также можно установить byobu в других дистрибутивах.

Используя byobu

Вы можете запустить byobu, выполнив byobu на главной машине после подключения с помощью ssh. Это даст вам оболочку, которая выглядит так:

image-byobu [!d13]

Вы также можете использовать терминал Byobu на машине Ubuntu с опцией -X и легко получить

Использование:

Начать byobu, набрав byobu .

Вы можете нажать F2, чтобы создать новое окно внутри текущую сессию, F3-F4, чтобы переключаться между различными окнами.

Лучшая часть aboutobobu - вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить экран / tmux (скелет byobu) в фоновый режим и возобновить следующий раз:

  • Чтобы выйти из него и выполнить его (отключение), нажмите F6.
  • В следующий раз, когда вы придете, просто сделайте byobu , и вы вернетесь туда, где вы были. byobu-detach-attach [!d14]

Вы также можете создавать различные сеансы byobu byobu -S session1 и так далее. И вы можете подключиться к любому из них, когда вернетесь.

Вы можете сделать гораздо больше, используя Byobu. Используй это! Здесь некоторые [) здесь , здесь или здесь .

19
ответ дан 10 August 2018 в 07:14

Самый простой ответ ...

ctrl + z приостанавливает запущенную программу

«bg» запустит ее в фоновом режиме

2
ответ дан 10 August 2018 в 07:14

Экран и nohup - лучший способ, но если вам нужно отключить уже запущенный процесс без экрана или nohup, вы можете запустить команду disown.

disown [-ar] [ -h] [ jobspec ... | pid ...]

Без options, удалите каждый jobspec из таблицы активных заданий. Если задана опция -h , задание не удаляется из таблицы, но помечено так, что SIGHUP не отправляется на задание, если оболочка получает SIGHUP. Если jobspec отсутствует, и ни опция -a , ни опция -r не используются, используется текущее задание. Если не задано jobspec , опция -a означает удаление или отметку всех заданий; параметр -r без аргумента jobspec ограничивает выполнение выполняемых заданий.

С отключением вы можете закрыть терминал и получить процесс работающий на машине.

72
ответ дан 10 August 2018 в 07:14

Эй, пока я согласился, что экран является наиболее эффективным вариантом. Вы можете использовать vncserver, а затем запустить процесс на нем.

Кроме того, если ваши единственные проблемы состоят в том, чтобы запустить процесс и не нужно брать его обратно, и, самое главное, вы не знали, что будете нужно закрыть сеанс, и у вас уже запущен процесс, вам не повезло, если вы использовали bash в качестве оболочки

Сначала вам нужно отправить процесс на задний план, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко вытащить список с помощью заданий команды)

Наконец, вызывается команда disown (за ней следует jobid ... так же, как и с bg)

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

7
ответ дан 10 August 2018 в 07:14

В то время как все говорят использовать disown (единственный вариант, который у вас есть после того, как вы уже начали процесс), nohup или даже запустить команду на экране ! d2], что полезно, если вы хотите увидеть весь вывод из команды ... Я поклонник экрана .. Я все еще пробовал самые последние основные дистрибутивы Linux и просто поставил работа в фоновом режиме и прекращение работы не приводит к тому, что все процессы, которые работают, умирают. Должна быть глобальная установка или что-то еще. Я пытаюсь это на некоторых довольно старых системах (slackware 12), и мой тестовый скрипт продолжает работать до тех пор, пока я не рунет его вручную:

  shell $ cat & gt;  test.pl #! / usr / bin / perl while (1) {sleep (1);  } shell $ perl ./test.pl & amp;  shell $ exit logout shell $ ps aux test.pl mymom 31337 1 0 13:25?  00:00:00 perl ./test.pl shell $  

Хотя я согласен, что экран был бы лучшим способом запустить это, даже если бы мой скрипт написал чтобы записывать файлы или что-то в этом роде. Мне никогда не приходилось использовать disown -a или nohup , если он не был полностью паранойей. Может быть, кто-то может пролить свет на то, как bash ведет себя по умолчанию? Может быть, некоторые системные администраторы меняют значения по умолчанию на больших оболочках, чтобы процессы своих пользователей перегружали систему?

178
ответ дан 10 August 2018 в 07:14

Самый простой способ - запустить команду в фоновом режиме с помощью & amp; . Затем просто напишите:

  disown -a  
2
ответ дан 10 August 2018 в 07:14

Я застрял в большом mv, поэтому я не мог остановить процесс, настроить экран и снова запустить его. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие шаги:

  1. ssh [server]
  2. command
  3. CTRL + Z
  4. bg
  5. disown
  6. exit

Шаг 3 приостанавливает текущий процесс (например, моя команда «mv»). Шаг 4 ставит приостановленный процесс на задний план и возобновляет его. Шаг 5 позволяет отказаться от процесса.

37
ответ дан 10 August 2018 в 07:14

Самый лучший способ - это самый простой способ.

nohup long-running-command & amp;

Это было сделано специально для этого, оно даже записывает stdout в nohup.log

man nohup

Если вы хотите «зафрахтовать» некоторые уже запущенные задачи, то лучший выбор - ctrl + z, затем запустите

bg (это будет зависеть от вашей последней приостановленной задачи, позволяющей ей продолжать работать)

, тогда быстрое disout должно поддерживать процесс после выхода из системы.

screen и другие могут это сделать, но это не то, для чего они предназначены. Я рекомендую nohup для задач, которые, как вы знаете, собираетесь оставить, и bg для задач, которые вы уже выполняете, и не хотите повторно запускать.

Имейте в виду, что оба имеют значение bash. Если вы не используете bash, тогда команды могут быть разными.

211
ответ дан 10 August 2018 в 07:14

Вместо:

  cmd options;   

Добавить до nohup :

  nohup cmd options & amp;   

Затем вы сможете увидеть консольный stdout:

  tail -f nohup.out  
-1
ответ дан 10 August 2018 в 07:14

Вы не можете сделать это после того, как процесс начался, вам нужно настроить все, прежде чем запускать долгое задание.

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

Экран имеет то преимущество, что вы можете отсоединиться от одной машины и снова подключиться к другой, что удобно, если вы хотите проверить длительные процессы, которые выходят за пределы рабочего дня.

] Существует разумное начало руководства к экрану здесь.

byobu предоставляет простой в использовании интерфейс поверх экрана с меню и т. Д. Это также текущая реализация экрана на более новой ubuntu. F2 для запуска нового терминала F3 / F4 для переключения взад и вперед и F6 для разъединения. Навсегда выйдите на конечные терминалы.

16
ответ дан 15 August 2018 в 19:14
  • 1
    byobu использует tmux в эти дни .. – scottl 28 November 2012 в 13:04
  • 2
    «Вы не можете сделать это после того, как процесс начался, вам нужно настроить все, прежде чем запускать многолетнее задание. & quot; - нет, вы можете использовать disown для достижения этого. См. Ответ @ bassgey – Rich 23 May 2013 в 21:11
  • 3
    после борьбы за изучение экрана и tmux .... byobu принес слезы на глаза – HDave 24 September 2014 в 02:06
  • 4
    отключить и при необходимости просто Ctrl-z , затем bg , чтобы получить его от активного терминала и фона. Затем отклоняется . – mimoralea 22 November 2017 в 00:49

Для одного сценария оболочки, который у меня запущен в течение длительного периода времени, я войду в систему и запустил процесс в фоновом режиме, используя «& amp;».

Пример:

  / path / to / my / script & amp;   

Я вышел из системы и отключил сеанс SSH. Когда я вхожу в систему через некоторое время, сценарий все еще выполняется, как доказано непрерывным сбором данных из сценария.

7
ответ дан 15 August 2018 в 19:14
  • 1
    Да, я хотел бы знать, как screen / tmux лучше, чем это простое решение. – Mads Skjern 16 March 2015 в 12:51
  • 2
    Да, я тоже вижу это на моем ubuntu, но это не должно быть теоретически. Я не понимаю, почему – Daniel Pinyol 22 April 2016 в 16:08
  • 3
    @MadsSkjern Поскольку вы не можете вводить какие-либо входные данные в скрипт, используя этот метод. – Ken Sharp 11 February 2017 в 02:18
  • 4
    @MadsSkjern причина в том, что если вы запустили такие процессы с помощью & amp; , если вы выйдете из системы и зашли на свой сеанс SSH, процесс все равно будет работает , но вы не будете иметь возможность видеть вывод этого процесса (если ваш сценарий эхом отозвался, вы его не увидите, но если он напишет файл, файл будет там) – DarkCygnus 24 August 2017 в 19:20

Вы должны проверить экран GNU и посмотреть, поможет ли он вам. В зависимости от того, как вам нужно приложение для запуска в режиме реального времени, это может вызвать больше проблем, чем оно решает, но по крайней мере это позволит вам возобновить сеанс, как будто вы его никогда не покидали.

Как использовать:

  • Используйте команду screen для первого запуска, прокрутите вводные сообщения, вам нужно передать терминал.
  • Ca Cc открывает другое терминал
  • Ca Ck убивает терминал
  • Вы можете использовать Ca C-Space и Ca C-Backspace для циклического перехода через терминалы
  • Ca Ca удобен, re в основном используя только два терминала
  • Ca Cd отсоединяет текущий сеанс экрана и выходит из экранов. Затем вы можете использовать экран -r для возобновления этого сеанса. У вас может быть несколько сеансов отдельного экрана одновременно, в этом случае вы увидите список доступных сеансов.

Существует много других опций, например разделенные экраны, а также все ярлыки полностью настраиваются.

3
ответ дан 15 August 2018 в 19:14

Существуют две основные программы, которые вы можете использовать для поддержки программ и состояния терминала через несколько соединений ssh. Это экран (действующий, но, к сожалению, не имеющий силы. По-видимому, активно развивается теперь ) и tmux (более новый, активно поддерживается). Byobu - это интерфейс, который может работать поверх их этих систем и предоставлять дополнительную информацию о состоянии Ubuntu. В новых установках он будет использовать tmux в качестве бэкэнд, если у вас установлена ​​более старая установка byobu и существующая конфигурация, она будет поддерживать предыдущий бэкэнд, будь то экран или tmux.

Byobu

Byobu можно установить на компьютер, выполнив это на машине на базе Debian:

  sudo aptitude install byobu  

Используя yum, вы делаете

  su -c 'yum install byobu'  

Также можно установить byobu в других дистрибутивах.

Используя byobu

Вы можете запустить byobu, выполнив byobu на главной машине после подключения с помощью ssh. Это даст вам оболочку, которая выглядит так:

image-byobu [!d13]

Вы также можете использовать терминал Byobu на машине Ubuntu с опцией -X и легко получить

Использование:

Начать byobu, набрав byobu .

Вы можете нажать F2, чтобы создать новое окно внутри текущую сессию, F3-F4, чтобы переключаться между различными окнами.

Лучшая часть aboutobobu - вам не нужно фактически убивать процессы, запущенные в терминале, чтобы покинуть терминал. Вы можете просто отправить экран / tmux (скелет byobu) в фоновый режим и возобновить следующий раз:

  • Чтобы выйти из него и выполнить его (отключение), нажмите F6.
  • В следующий раз, когда вы придете, просто сделайте byobu , и вы вернетесь туда, где вы были. byobu-detach-attach [!d14]

Вы также можете создавать различные сеансы byobu byobu -S session1 и так далее. И вы можете подключиться к любому из них, когда вернетесь.

Вы можете сделать гораздо больше, используя Byobu. Используй это! Здесь некоторые [) здесь , здесь или здесь .

19
ответ дан 15 August 2018 в 19:14
  • 1
    Я попытался использовать byobu из сеанса, основанного на PuTTY, в своем поле Ubuntu, но я возвращаю строку состояния и прокручиваю на дисплее. Несмотря на то, что он отсоединился правильно, нажав F6, это не было полезным решением в моей настройке. – jfmessier 6 November 2013 в 23:47
  • 2
    @jfmessier Это потому, что PuTTY не принимает ncurses (utf-8 в принципе) хорошо. Можно устранить эту проблему, выполнив этот поток - stackoverflow.com/questions/10731099/… – SiddharthaRT 7 November 2013 в 16:40
  • 3
    Это круто! 1. он дает мне цветное приглашение bash, которое я не могу включить с bash в качестве моей оболочки по умолчанию, и 2. Я могу запустить 2 бота в одно и то же время, а еще иметь другой терминал для работы ! @SiddharthaRT вы заслуживаете поддержки сэра! – Dev 22 July 2016 в 09:53

Самый простой ответ ...

ctrl + z приостанавливает запущенную программу

«bg» запустит ее в фоновом режиме

2
ответ дан 15 August 2018 в 19:14
  • 1
    Не отказываясь от процесса (с чем-то вроде disown или nohup ), это обычно не приведет к запуску процесса после окончания сеанса SSH. – Eliah Kagan 13 August 2013 в 05:32
  • 2
    На моем сервере Ubuntu с настройкой по умолчанию он действительно работает! – Mads Skjern 16 March 2015 в 12:53

Экран и nohup - лучший способ, но если вам нужно отключить уже запущенный процесс без экрана или nohup, вы можете запустить команду disown.

disown [-ar] [ -h] [ jobspec ... | pid ...]

Без options, удалите каждый jobspec из таблицы активных заданий. Если задана опция -h , задание не удаляется из таблицы, но помечено так, что SIGHUP не отправляется на задание, если оболочка получает SIGHUP. Если jobspec отсутствует, и ни опция -a , ни опция -r не используются, используется текущее задание. Если не задано jobspec , опция -a означает удаление или отметку всех заданий; параметр -r без аргумента jobspec ограничивает выполнение выполняемых заданий.

С отключением вы можете закрыть терминал и получить процесс работающий на машине.

72
ответ дан 15 August 2018 в 19:14
  • 1
    Это также мой любимый способ сделать это. Я часто использую disown -a & amp; & amp; Выход – Stefano Palazzo♦ 21 October 2010 в 22:45
  • 2
    Отлично. Это прекрасная команда и она заслуживает всех! – Greg 29 April 2014 в 15:38
  • 3
    одно слово предостережения, я остановил текущий процесс с помощью Ctrl-Z и не запустил его в фоновом режиме, прежде чем вызывать disown , и он его убил. – HDave 24 September 2014 в 02:07
  • 4
    Может произойти сбой, если он хочет писать на терминал. Перенаправление вывода запущенного процесса не так просто. Лучше начать его правильно с nohup. – jiggunjer 25 August 2016 в 15:42
  • 5
    Это хороший ответ, потому что он напрямую отвечает на вопрос. Автор вопроса спросил, что делать после , уже выполнив кучу длинных команд. Большинство этих ответов позволяют вам знать, что делать before , вы выполняете команды. – q0rban 17 August 2017 в 03:24

Эй, пока я согласился, что экран является наиболее эффективным вариантом. Вы можете использовать vncserver, а затем запустить процесс на нем.

Кроме того, если ваши единственные проблемы состоят в том, чтобы запустить процесс и не нужно брать его обратно, и, самое главное, вы не знали, что будете нужно закрыть сеанс, и у вас уже запущен процесс, вам не повезло, если вы использовали bash в качестве оболочки

Сначала вам нужно отправить процесс на задний план, набрав Ctrl + Z, а затем bg% 1 (число зависит от номера задания, обычно это 1, но вы можете легко вытащить список с помощью заданий команды)

Наконец, вызывается команда disown (за ней следует jobid ... так же, как и с bg)

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

7
ответ дан 15 August 2018 в 19:14
  • 1
    Этот ответ лучший! Почему все говорят о экране , вопрос был поставлен после входа в систему, как сохранить работу процессов, теперь после входа в систему, но перед их запуском. Отличный ответ Хорхе, ты действительно помог мне! :) – jwbensley 10 August 2012 в 22:13
  • 2
    Просто bg (без % 1 ) достаточно часто, поскольку по умолчанию используется текущее задание – Walter Tross 24 November 2012 в 03:55
  • 3
    Было бы неплохо иметь исчерпывающий ответ: априори (настройка заранее): экран экрана ascii (старый), tmux (neewer); X windows: vnc (старый, по-прежнему поддерживается), xpra (новее), причем xpra является без корневым. Задняя (сохраняющаяся после того, как вы начали): ^ Z, отречься, но я слишком ленив, чтобы ее больше использовать. – Krazy Glew 13 July 2018 в 02:02

В то время как все говорят использовать disown (единственный вариант, который у вас есть после того, как вы уже начали процесс), nohup или даже запустить команду на экране ! d2], что полезно, если вы хотите увидеть весь вывод из команды ... Я поклонник экрана .. Я все еще пробовал самые последние основные дистрибутивы Linux и просто поставил работа в фоновом режиме и прекращение работы не приводит к тому, что все процессы, которые работают, умирают. Должна быть глобальная установка или что-то еще. Я пытаюсь это на некоторых довольно старых системах (slackware 12), и мой тестовый скрипт продолжает работать до тех пор, пока я не рунет его вручную:

  shell $ cat & gt;  test.pl #! / usr / bin / perl while (1) {sleep (1);  } shell $ perl ./test.pl & amp;  shell $ exit logout shell $ ps aux test.pl mymom 31337 1 0 13:25?  00:00:00 perl ./test.pl shell $  

Хотя я согласен, что экран был бы лучшим способом запустить это, даже если бы мой скрипт написал чтобы записывать файлы или что-то в этом роде. Мне никогда не приходилось использовать disown -a или nohup , если он не был полностью паранойей. Может быть, кто-то может пролить свет на то, как bash ведет себя по умолчанию? Может быть, некоторые системные администраторы меняют значения по умолчанию на больших оболочках, чтобы процессы своих пользователей перегружали систему?

178
ответ дан 15 August 2018 в 19:14
  • 1
    Обычно я называю сеансы экрана с помощью экрана -S name , чтобы упростить подключение к правильному позже. – David Oneill 25 November 2012 в 04:37
  • 2
    Если у вас есть еще один запрос, спросите его как новый вопрос – heemayl 30 July 2015 в 05:05
  • 3
    Ссылка не работает – Gab是好人 16 September 2016 в 16:50
  • 4
    Лично я работаю над коробкой без программного обеспечения для управления пакетами. Потратив примерно полчаса на создание зависимостей для TMUX (который у меня лично есть и у меня есть) из источника, стало ясно, что экран стал лучшим и более простым решением для меня. TL; DR: оптимальное решение этой проблемы зависит от варианта использования, машины и того, сколько времени вам нужно настроить. Спасибо за этот ответ :) – Max von Hippel 1 November 2017 в 07:30
  • 5
    Комбинация с экраном -S перед выходом и screen -r при возвращении поразительна! – Meloman 14 March 2018 в 14:03
  • 6
    Спасибо за это. Это решение сработало для меня, пока tmux не сделал (я использую версию bash для Windows, а ssh'ing - в Linux-машину) – Michael Sorensen 13 May 2018 в 22:53

Самый простой способ - запустить команду в фоновом режиме с помощью & amp; . Затем просто напишите:

  disown -a  
2
ответ дан 15 August 2018 в 19:14

Я застрял в большом mv, поэтому я не мог остановить процесс, настроить экран и снова запустить его. Мне удалось выйти из сеанса ssh с запущенным процессом, выполнив следующие шаги:

  1. ssh [server]
  2. command
  3. CTRL + Z
  4. bg
  5. disown
  6. exit

Шаг 3 приостанавливает текущий процесс (например, моя команда «mv»). Шаг 4 ставит приостановленный процесс на задний план и возобновляет его. Шаг 5 позволяет отказаться от процесса.

37
ответ дан 15 August 2018 в 19:14
  • 1
    Встроенные функции всегда являются моим первым выбором :) THX – ken_oy 2 April 2018 в 16:30
  • 2
    Этот ответ должен быть отмечен как правильный. Установка и привыкание экрана для решения этой проблемы преувеличена. – Ulrich-Lorenz Schlüter 5 April 2018 в 14:41
  • 3
    Это очень полезно, если вы уже запустили какую-либо команду и которая работает в течение долгого времени. Завершение и запуск его на сеансе TMUX потребует времени – Deepali Mittal 14 May 2018 в 13:54

Самый лучший способ - это самый простой способ.

nohup long-running-command & amp;

Это было сделано специально для этого, оно даже записывает stdout в nohup.log

man nohup

Если вы хотите «зафрахтовать» некоторые уже запущенные задачи, то лучший выбор - ctrl + z, затем запустите

bg (это будет зависеть от вашей последней приостановленной задачи, позволяющей ей продолжать работать)

, тогда быстрое disout должно поддерживать процесс после выхода из системы.

screen и другие могут это сделать, но это не то, для чего они предназначены. Я рекомендую nohup для задач, которые, как вы знаете, собираетесь оставить, и bg для задач, которые вы уже выполняете, и не хотите повторно запускать.

Имейте в виду, что оба имеют значение bash. Если вы не используете bash, тогда команды могут быть разными.

211
ответ дан 15 August 2018 в 19:14

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

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