Как в Ubuntu запускать задачу в фоне?
Доступен только один терминал. Как запустить /home/user/app в фоне, чтобы использовать терминал для других целей, и как вернуть app из фона в терминал?
Ответы (2 шт):
знак '&' в конце команды запускает её в фоне.
- Список задач, выполняющихся в фоне, возвращает команда
jobs. - Для того, чтобы вернуть задачу из фона,
fg %[номер-задачи] - Для того, чтобы отправить текущую задачу в фон: Ctrl-z заморозит текущее приложение и вернет управление башу.
bgразморозить приложение и продолжит его выполнение в фоне. - Для того, чтобы остановить фоновую задачу,
kill %[номер-задачи]
Пример: в фоне ping каждые две секунды пингует localhost. Затем фоновые задачи последовательно убиваются.
user@server$ ping -i 2 -p 1 localhost > ping1.log &
[1] 42785
user@server$ ping -i 2 -p 2 localhost > ping2.log &
[2] 42840
user@server$ jobs
[1]- Running ping -i 2 -p 1 localhost > ping1.log &
[2]+ Running ping -i 2 -p 2 localhost > ping2.log &
user@server$ kill %1
user@server$ jobs
[1]- Terminated ping -i 2 -p 1 localhost > ping1.log
[2]+ Running ping -i 2 -p 2 localhost > ping2.log &
user@server$ kill %2
user@server$ jobs
[2]+ Terminated ping -i 2 -p 2 localhost > ping2.log
user@server$ jobs
user@server$
Пример перевода задачи из фона на передний план и обратно
user@server$ ping -i 2 -p 1 localhost > ping1.log &
[1] 44564
user@server$ fg %1
ping -i 2 -p 1 localhost > ping1.log
^Z
[1]+ Stopped ping -i 2 -p 1 localhost > ping1.log
user@server$ jobs
[1]+ Stopped ping -i 2 -p 1 localhost > ping1.log
user@server$ bg
[1]+ ping -i 2 -p 1 localhost > ping1.log &
user@server$ jobs
[1]+ Running ping -i 2 -p 1 localhost > ping1.log &
user@server$
Для более продвинутой работы в фоне лучше использовать утилиту screen.
запускаешь screen, внутри запустится шелл, в нем работаешь как обыно.
можно создать ещё одно "окно" нажав ctrl-a потом c. Там поделать что-то другое и переключть окна ctrl-a 0.
можно свернуть скрин выйдя в прошлый терминал по ctrl-a d и вернуться запустив скрин с номером сессии