
Linux. Работа заданий в фоновом режиме, bg
По умолчанию задания пользователя запускаются в активном режиме. При этом, для продолжения работы, приходится ждать завершения задания. Чтобы этого избежать в Linux есть возможность не блокировать дальнейшую работу пользователя, а запустить задание в фоновом режиме. Это может пригодиться, когда нужно запустить выполнение программы параллельно с основной работой. Для запуска команды в фоновом режиме нужно дописать в конце команды символ амперсант «&».
Запуск в фоновом режиме
# Запуск задания в активном режиме
$ sleep 1000 [Enter]
# Запуск задания в фоновом режиме
$ sleep 1000 & [Enter]
[2] 87924После запуска команды система выведет уникальный номер запущенного задания (значение в скобках [2] в примере выше) и далее идентификатор рабочего процесса (87924). При помощи этих идентификаторов можно управлять заданием и процессом, указывая их в соответствующих командах.
Проверка состояния фонового задания
Посмотреть информацию о том, какое фоновое задание работает, а какое уже завершилось, можно при помощи команды «jobs». При вводе команды отобразится список текущих заданий пользователя. После номера задания в скобках будет указано состояние: Running - задание выполняется; Done - задание успешно завершено. После завершения работы задания, сообщение о завершении «Done» будет выведено не только после ввода команды «jobs», но и после ввода любой другой команды пользователем. Тем самым система сообщит о том, какие задания были завершены.
# Запуск задания в фоновом режиме
$ sleep 10 &
[1] 21447
# Запуск задания в фоновом режиме
$ sleep 50 &
[2] 21866
# Вывод списка заданий
$ jobs
[1]- Done sleep 10
[2]+ Running sleep 50 &
Перевод в фоновый режим активного задания
Для того, чтобы перевести в фоновый режим работу активного задания, его необходимо предварительно остановить. После остановки активного задания его можно запустить в фоновом режиме с помощью команды «bg». Команда «bg», введённая без параметров, переведёт в фоновый режим последнее, незавершённое задание, с которым работал пользователь (Отмеченное символом «+»в списке активных заданий, выводимом командой«jobs»). Того же эффекта вы добьётесь, запустив команду с параметрами «%%» и «%+».
# Запуск задания в активном режиме
$ sleep 100
# Остановка работы задания
^Z [Ctrl+Z]
[1]+ Stopped sleep 100
$ sleep 200
^Z [Ctrl+Z]
[2]+ Stopped sleep 200
$ sleep 300
^Z [Ctrl+Z]
[3]+ Stopped sleep 300
# Вывод списка заданий
$ jobs
[1] Stopped sleep 100
[2]- Stopped sleep 200
[3]+ Stopped sleep 300
# Запуск последнего задания в фоновом режиме, вариант 1
$ bg
[3]+ sleep 300 &
# Запуск последнего задания в фоновом режиме, вариант 2
$ bg %%
[3]+ sleep 300 &
# Запуск последнего задания в фоновом режиме, вариант 3
$ bg %+
[3]+ sleep 300 &
$ jobs
[1]- Stopped sleep 100
[2]+ Stopped sleep 200
[3] Running sleep 300 &
Если у вас есть в списке несколько остановленных заданий, вы можете возобновить работу конкретного из них в фоновом режиме. Для этого вызовите команду «bg» с параметром в виде уникального номера задания (указанного в скобках), поставив перед ним символ процент «%».
# Вывод списка заданий
$ jobs
[1] Stopped sleep 100
[2]- Stopped sleep 200
[3]+ Stopped sleep 300
# Запуск задания [2] в фоновом режиме
$ bg %2
[2]- sleep 200 &
$ jobs
[1]- Stopped sleep 100
[2] Running sleep 200 &
[3]+ Stopped sleep 300