Linux. Работа заданий в фоновом режиме, bg

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