Как установленная команда в фоне, закройте терминал и верните его к fg?

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

Пример:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

Конечно, после заключительного терминала никакое задание не найдено.

Следующий пример:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

Что я делал неправильно? Мог кто-либо объяснять меня, как выполнить команду в фоновом режиме и вернуть ее к переднему плану.

10
задан 27 April 2016 в 04:47

3 ответа

Это невозможно так, как ты хочешь.

Давайте рассмотрим некоторые основные понятия:

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

Если вы закрыли терминал, все процессы в сеансе мертвы, за исключением тех (демонов), которые были переназначены процессу init. И нет никакого способа снова дать им управляющий терминал.

Одним словом, процесс родительских функций сильно ограничен в системах POSIX (демонизация является исключением), и ваши требования не могут быть удовлетворены.

0
ответ дан 27 April 2016 в 04:47
  1. Установить screen:

    sudo apt-get install screen
    
  2. Пуск screen:

    screen -S session_name
    
  3. Выполнить ваши команды, что вам нужно.

  4. Отсоедините screen от терминала (ваши команды все еще будут выполняться):

    Нажмите CTRL + a + d

  5. Закройте терминал

  6. Откройте другой терминал и заново подключите последний сеанс screen:

    screen -r
    

Для получения дополнительной информации и дополнительных опций для screen см. man screen.

0
ответ дан 27 April 2016 в 04:47

Вы пробовали: byobu или tmux, которые являются терминальными мультиплексорами. Не совсем то, что вы ищете, но у него похожее поведение.

byobu-screen

Затем выполните команду, чтобы отсоединить:

byobu-screen -d

Чтобы возобновить:

byobu-screen -r

См. https://help.ubuntu.com/community. / экран

0
ответ дан 27 April 2016 в 04:47

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

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