Команда fg

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

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

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

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

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

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

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

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

Для запуска задачи в фоновом режиме используется символ & после имени команды:

$ ping 127.0.0.1 &
[1] 11211
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.037 ms
...

В данном случае осуществляется отправка ping-пакетов на локальную систему через узловой сетевой интерфейс и прием ответов на них. Задаче присваивается идентификатор 1, вывод передается через этот же терминал, хотя сама задача исполняется в фоновом режиме, ведь если попытаться завершить ее исполнение с помощью сочетания клавиш CTRL+C, ничего не получится. Также не лишним будет выполнить команду jobs, чтобы убедиться в наличии фоновой задачи (ввиду того, что в примере вывод утилиты передается через тот же терминал, ввод команды будет осложнен):

$ jobs
[1]+ Запущен ping 127.0.0.1 &

2. Перевод задачи в обычный режим.

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

$ fg %ping
ping 127.0.0.1
64 bytes from 127.0.0.1: icmp_seq=244 ttl=64 time=0.034 ms

64 bytes from 127.0.0.1: icmp_seq=266 ttl=64 time=0.026 ms
^C
--- 127.0.0.1 ping statistics ---
266 packets transmitted, 266 received, 0% packet loss, time 636ms
rtt min/avg/max/mdev = 0.026/0.034/0.065/0.007 ms

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