Команды 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 &