Команда bg

Команда bg предназначена для возобновления исполнения остановленной задачи в фоновом режиме в командных оболочках bash и ksh. Вы сможете пользоваться командной оболочкой, причем весь вывод исполняющейся в фоновом режиме задачи в процессе ее работы будет отображаться с помощью этой же командной оболочки. При этом вы не сможете взаимодействовать с исполняющейся в фоновом режиме задачей. Для того, чтобы вернуть задачу в обычный режим и начать взаимодействие с ней, следует использовать команду fg, а для завершения исполнения команды в фоновом режиме — команду kill.

Команда bg реализована и как встроенная команда, и как внешняя команда, но пользователю следует использовать лишь встроенную команду, ведь внешняя команда предназначена для особых случаев.

Базовый синтаксис команды bg выглядит следующим образом:

$ bg <идентификатор задачи>

Процесс перевода задачи в фоновый режим предельно прост: достаточно воспользоваться сочетанием клавиш CTRL+Z для приостановки исполнения задачи, после чего выполнить приведенную выше команду для возобновления исполнения задачи уже в фоновом режиме. В качестве идентификатора задачи могут использоваться:

  • Номер, присвоенный задаче командной оболочкой при остановке ее исполнения, например, %1 или %2.
  • Начало команды, например, %ping или %nmap.
  • Указание на текущую задачу, то есть, %+ или %%.
  • Указание на предыдущую задачу, то есть, %-.

Для ознакомления со списком задач командной оболочки и их идентификаторами достаточно воспользоваться командой jobs. Команды fg и kill также принимают идентификаторы задач описанных форматов.

Примеры использования

1. Запуск долго исполняющейся команды в обычном режиме

$ ping 127.0.0.1
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.057 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.062 ms
...

В данном случае осуществляется отправка ping-пакетов на локальную систему через узловой сетевой интерфейс и прием ответов на них.

2. Остановка исполнения команды

...
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.060 ms
^Z
[1]+  Stopped                 ping 127.0.0.1

Для остановки исполнения команды было использовано сочетание клавиш CTRL+Z. В результате а задаче был присвоен идентификатор %1. В этом достаточно просто убедиться с помощью команды jobs:

$ jobs
[1]+  Stopped                 ping 127.0.0.1

3. Возобновление исполнения задачи в фоновом режиме

$ bg %ping
[1]+ ping 127.0.0.1 &
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.079 ms

Здесь в качестве идентификатора задачи было использовано начало команды, хотя можно бы было использовать такие идентификаторы, как %1, %+ или %%.

4. Перевод задачи в обычный режим и завершение ее исполнения

$fg %ping
64 bytes from 127.0.0.1: icmp_seq=180 ttl=64 time=0.069 ms
64 bytes from 127.0.0.1: icmp_seq=181 ttl=64 time=0.063 ms
...
64 bytes from 127.0.0.1: icmp_seq=216 ttl=64 time=0.068 ms
^C
--- 127.0.0.1 ping statistics ---
216 packets transmitted, 216 received, 0% packet loss, time 378086ms
rtt min/avg/max/mdev = 0.053/0.068/0.092/0.010 ms

Для завершения исполнения задачи использовалось сочетание клавиш CTRL+C.