Команды jobs, fg, bg
Запущенный процесс в обычном режиме работает в режиме «foreground», т.е. — «на переднем плане», другими словами — «в приоритетном режиме». В таком режиме он принимает команды с управляющего терминала, в котором он запущен, и на него же выводит информацию stdout
и stderr
. Кроме того, он делает недоступным командную строку. Чтобы запустить задачу в фоновом режиме — в конце команды необходимо добавить знак амперсанда &
.
Запуск фоновых заданий
Запустим три фоновых задания (сжимаем поток нулей и отправляем результат в /dev/null
):
$ nice gzip < /dev/zero > /dev/null & [1] 3380
$ nice bzip2 < /dev/zero > /dev/null & [2] 3381
$ nice xz < /dev/zero > /dev/null & [3] 3382
Три задания, с номерами 1, 2, 3 и PID-ами 3380, 3381, 3382.
Управление фоновыми заданиями
Команды jobs
, bg
(background) и fg
(foreground) позволяют управлять заданиями, выполняющимися на переднем и заднем планах:
jobs
выводит список фоновых процессовfg номер
переводит процесс на передний планbg номер
переводит процесс на задний план
Посмотрим список фоновых процессов:
$ jobs [1] Запущен nice gzip < /dev/zero > /dev/null & [2]- Запущен nice bzip2 < /dev/zero > /dev/null & [3]+ Запущен nice xz < /dev/zero > /dev/null &
$ jobs -l [1] 3380 Запущен nice gzip < /dev/zero > /dev/null & [2]- 3381 Запущен nice bzip2 < /dev/zero > /dev/null & [3]+ 3382 Запущен nice xz < /dev/zero > /dev/null &
Знак «плюс» означает «текущее», т.е. то, с которым мы работаем сейчас. Знак «минус» означает «предыдущее». Если мы завершим текущее — то предыдущее станет текущим. Команды fg
и bg
без номера задания будут работать с текущим.
Переведем третье задание (текущее) на передний план:
$ fg nice xz < /dev/zero > /dev/null
Теперь терминал ожидает окончания выполнения задания. Поскольку задание у нас бесконечное — терминал будет занят бесконечно. Приостановим эту задачу с помощью Ctrl+Z
:
^Z
[3]+ Остановлен nice xz < /dev/zero > /dev/null
$ jobs -l [1] 3380 Запущен nice gzip < /dev/zero > /dev/null & [2]- 3381 Запущен nice bzip2 < /dev/zero > /dev/null & [3]+ 3382 Остановлено nice xz < /dev/zero > /dev/null
Теперь, чтобы продолжить её выполнение в фоновом режиме:
$ bg [3]+ nice xz < /dev/zero > /dev/null &
$ jobs -l [1] 3380 Запущен nice gzip < /dev/zero > /dev/null & [2]- 3381 Запущен nice bzip2 < /dev/zero > /dev/null & [3]+ 3382 Запущен nice xz < /dev/zero > /dev/null &
Чтобы завершить фоновое задание, надо переместить его на передний план, а потом завершить с помощью Ctrl+C
:
$ fg 1 nice gzip < /dev/zero > /dev/null ^C
$ jobs -l [2]- 3381 Запущен nice bzip2 < /dev/zero > /dev/null & [3]+ 3382 Запущен nice xz < /dev/zero > /dev/null &