Управление заданиями
100%

Процессы · Урок 11

Управление заданиями

Узнайте, как интерактивная оболочка управляет заданиями переднего плана, заднего плана и остановленными заданиями.

Интерактивные оболочки используют управление заданиями для координации конвейеров внутри одного терминального сеанса. Задание может содержать один процесс или целый конвейер, обычно объединённый в группу процессов, чтобы терминал и оболочка могли действовать на него как на единое целое.

Запуск фонового задания

Добавьте &, чтобы запустить конвейер асинхронно:

$ sleep 1000 &
[1] 18420

Оболочка возвращает приглашение, не ожидая завершения задания. Фоновое состояние не перенаправляет вывод автоматически, не отсоединяет управляющий терминал и не заставляет задание пережить выход из системы. При необходимости явно перенаправляйте ввод и вывод, а для работы, которая должна пережить интерактивную оболочку, используйте диспетчер служб, планировщик или мультиплексор терминала.

Фоновое задание, пытающееся читать из управляющего терминала, обычно останавливается сигналом SIGTTIN, поскольку не является группой процессов переднего плана терминала.

Что завершающий & просит сделать интерактивную оболочку?

Перечисление заданий оболочки

Встроенная команда jobs перечисляет задания, известные текущей оболочке:

$ jobs
[1]    Running    sleep 1000 &
[2]-   Running    sleep 1001 &
[3]+   Stopped    sleep 1002

Число в квадратных скобках — идентификатор задания оболочки, а не PID. Префикс % образует спецификацию задания, например %1. Метка + обозначает текущее задание, которое многие команды выбирают без операнда; - обозначает предыдущее задание.

Поскольку таблица заданий принадлежит одной оболочке, оболочка другого терминала обычно не может перечислять эти задания или обращаться к ним через собственные встроенные jobs, fg и bg.

Что перечисляет встроенная команда jobs?

Остановка и продолжение задания

Когда задание находится на переднем плане, нажатие Ctrl-Z обычно заставляет терминал отправить SIGTSTP его группе процессов переднего плана. После остановки задания оболочка возвращает управление:

$ sleep 1002
^Z
[3]+  Stopped    sleep 1002

Продолжите текущее остановленное задание на заднем плане:

$ bg

bg отправляет сигнал продолжения и оставляет задание вне переднего плана терминала. Команда полезна только для остановленного задания; уже работающее на заднем плане задание не нужно возобновлять.

Что bg %3 делает с остановленным заданием 3?

Перемещение задания на передний план

Используйте fg со спецификацией задания, чтобы сделать его группой процессов переднего плана терминала и ожидать:

$ fg %1

Без операнда fg обычно выбирает текущее задание, отмеченное +. Остановленное задание продолжается при переходе на передний план.

Что делает fg %1?

Отправка сигнала заданию

Оболочки позволяют kill принимать спецификацию задания:

$ kill -TERM %1

Обычно сигнал отправляется группе процессов задания, а не только одному участнику конвейера. Сначала проверьте выбранное задание и используйте SIGTERM до рассмотрения принудительной эскалации. Спецификации заданий — синтаксис оболочки; скрипты и внешние инструменты чаще работают с проверенными PID или идентификаторами групп процессов.

Какой операнд обозначает задание оболочки 1, а не процесс с PID 1?

Урок завершён

Вы завершили Управление заданиями

Теперь вы можете осознанно перемещать задания между состояниями под управлением оболочки.

  • Используйте & для запуска фонового задания без автоматического отсоединения.

  • Используйте jobs для проверки таблицы заданий текущей оболочки.

  • Останавливайте через Ctrl-Z и продолжайте на заднем плане через bg.

  • Возвращайте выбранное задание в терминал через fg.

  • При отправке сигналов обращайтесь к заданиям оболочки через %JOB_ID.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Назад к Процессы