ОП.05Процессы: PID, состояния и сигналызанятие 7Материалы

Часть 4 из 7

Передний план и фон: jobs, bg, fg

В этой части разберём, что такое задание оболочки, чем передний план отличается от фона и как переводить задание между ними клавишами и командами jobs, bg и fg.

  1. 4.1 Задания оболочки

4.1 Задания оболочки

Каждая команда, запущенная из оболочки, становится заданием (job). Задание на переднем плане занимает терминал: ввод с клавиатуры получает оно, а оболочка ждёт его завершения и не принимает новых команд. Задание в фоне работает само по себе, а терминал свободен для следующих команд.

Передний план похож на разговор по телефону: пока он идёт, вы не можете начать второй. Фон — это стиральная машина: запустили, и она работает, пока вы заняты другим. Остановка Ctrl+Z — кнопка «пауза» на этой машине: работа не потеряна, её можно продолжить.

ДействиеКакЧто происходит
запустить в фонекоманда &задание работает, терминал свободен
остановить задание переднего планаCtrl+Zзадание в состоянии T, терминал возвращается оболочке
список заданийjobs, jobs -lномера, состояние, с -l — ещё и PID
продолжить в фонеbg %1остановленное задание продолжает работу в фоне
вернуть на передний планfg %1задание снова занимает терминал
прервать задание переднего планаCtrl+Cзадание получает сигнал прерывания и обычно завершается

В выводе jobs знак + отмечает текущее задание — то, к которому относятся fg и bg без номера, а - — предыдущее. Задание, запущенное в фоне, всё ещё связано с терминалом: если оно попытается прочитать ввод с клавиатуры, оболочка остановит его.

В терминалеОстановка, фон и передний план
  1. sleep 1000# задание переднего плана
    что делает

    Что делает команда. Запускает sleep на переднем плане.

    По частям:

    sleep
    ничего не делать указанное число секунд
    1000
    сколько секунд
  2. ^Z# Ctrl+Z: остановить
  3. jobs -l# номер, PID и состояние
    что делает

    Что делает команда. Выводит задания оболочки с PID и состоянием.

    По частям:

    jobs
    встроенная команда оболочки: вывести задания
    -l
    добавить PID каждого задания
  4. bg %1# продолжить в фоне
    что делает

    Что делает команда. Продолжает остановленное задание 1 в фоне.

    По частям:

    bg
    встроенная команда оболочки: продолжить задание в фоне
    %1
    какое задание, задание номер 1
  5. jobs
    что делает

    Что делает команда. Выводит задания оболочки и их состояние.

    По частям:

    jobs
    встроенная команда оболочки: вывести задания
  6. fg %1# вернуть на передний план
    что делает

    Что делает команда. Возвращает задание 1 на передний план: оно снова занимает терминал.

    По частям:

    fg
    встроенная команда оболочки: вернуть задание на передний план
    %1
    какое задание, задание номер 1
  7. ^C# Ctrl+C: прервать
  8. jobs# заданий не осталось
    что делает

    Что делает команда. Выводит задания оболочки и их состояние.

    По частям:

    jobs
    встроенная команда оболочки: вывести задания
Результат

после Ctrl+Z задание остановлено; bg продолжает его в фоне со знаком &; fg возвращает его в терминал, Ctrl+C завершает.

Снимок 4.1Ubuntu 24.04
  1. 1Ctrl+Z: задание 1 остановлено
  2. 2jobs -l: PID и состояние Stopped
  3. 3bg: задание продолжает работу в фоне
  4. 4jobs: Running
  5. 5fg вернул sleep в терминал, Ctrl+C прервал его
Задание sleep 1000: остановка, продолжение в фоне, возврат и прерывание.Весь снимок ↗

Задание sleep 1000: остановка, продолжение в фоне, возврат и прерывание.

Что показывает снимок. Ctrl+Z остановил задание 1, bg продолжил его в фоне со знаком &, fg вернул на передний план, Ctrl+C прервал; после этого заданий не осталось.

Где это пригодится. Долгую команду, запущенную без &, не нужно прерывать: Ctrl+Z и bg отправляют её в фон, и терминал освобождается.

Итоги части 4

  • Задание на переднем плане занимает терминал; & запускает задание в фоне.
  • Ctrl+Z останавливает задание, bg %N продолжает его в фоне, fg %N возвращает на передний план.
  • jobs -l выводит номера заданий, PID и состояние; + — текущее задание.
  • Ctrl+C прерывает задание переднего плана.

В отчётСнимок jobs с остановленным и продолженным заданием.

Открыть в отдельной вкладке ↗