Я пытаюсь узнать, как выполнить команду в фоновом режиме и затем принести ее к переднему плану позже. Я сыт по горло учебными руководствами и ответами, где люди заявляют, что это просто, просто добавьте &
в конец команды для получения выполненного в фоновом режиме. Это работает только в единственном окне терминала. Я хочу поместить команду в знания в одном терминале и вернуть его к переднему плану после повторного открытия терминала
Пример:
$ 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
Что я делал неправильно? Мог кто-либо объяснять меня, как выполнить команду в фоновом режиме и вернуть ее к переднему плану.
Это невозможно так, как ты хочешь.
Давайте рассмотрим некоторые основные понятия:
Если вы закрыли терминал, все процессы в сеансе мертвы, за исключением тех (демонов), которые были переназначены процессу init. И нет никакого способа снова дать им управляющий терминал.
Одним словом, процесс родительских функций сильно ограничен в системах POSIX (демонизация является исключением), и ваши требования не могут быть удовлетворены.
Установить screen
:
sudo apt-get install screen
Пуск screen
:
screen -S session_name
Выполнить ваши команды, что вам нужно.
Отсоедините screen
от терминала (ваши команды все еще будут выполняться):
Нажмите CTRL kbd> + a kbd> + d kbd>
Закройте терминал
Откройте другой терминал и заново подключите последний сеанс screen
:
screen -r
Для получения дополнительной информации и дополнительных опций для screen
см. man screen
.
Вы пробовали: byobu
или tmux
, которые являются терминальными мультиплексорами. Не совсем то, что вы ищете, но у него похожее поведение.
byobu-screen
Затем выполните команду, чтобы отсоединить:
byobu-screen -d
Чтобы возобновить:
byobu-screen -r