Команда fg в Linux

Linux 命令大全Полный список команд Linux

fgЭто важная команда для управления процессами в системах Linux/Unix, её полное название — "foreground". Её основная функция — переключать задачи, выполняющиеся в фоновом режиме, на передний план для продолжения выполнения.

Зачем нужна команда fg

Представьте, что вы делаете заказ в ресторане:

  1. Вы заказываете основное блюдо (процесс переднего плана)
  2. В то же время попросите кухню приготовить десерт (фоновый процесс)
  3. Когда вы закончите основное блюдо, вы можете попросить официанта принести вам десерт (команда fg)

В Linux этот механизм переключения задач между передним и фоновым режимами позволяет вам:

  • Гибко управляйте порядком выполнения нескольких задач
  • Временно приостановите текущую задачу, чтобы заняться более срочными делами
  • Эффективно используйте сеансы терминала

Базовый синтаксис

fg [作业标识]

Описание параметра

Параметр Описание
Без параметра Возобновите последнее фоновое задание
%n Возобновите задание с номером n
%str Возобновите задание, начинающееся с str
%?str Возобновите задание, содержащее str
%+ или %% Эквивалентно отсутствию параметра; возобновляет последнее задание
%- Возобновите предпоследнее фоновое задание

Примеры использования

Пример 1: Базовое использование

  1. Запустите длительную задачу и поместите её в фоновый режим:

    sleep 60 &
    [1] 12345  # 系统返回作业号 [1] 和进程ID 12345
  2. Просмотрите текущий список заданий:

    jobs
    [1]+  运行中               sleep 60 &
  3. Верните задание на передний план:

    fg %1
    # 或者简写为
    fg

Пример 2: Возобновление конкретного задания

Пример

# Запуск нескольких фоновых заданий
python script1.py &
python script2.py &

# Просмотр списка заданий
jobs
[1]- Выполняется python script1.py&
[2]+ Выполняется python script2.py&

# Возобновить первое задание
fg %1

Как это работает

Переход состояния процесса

Пример

graph LR
A[Выполняется на переднем плане] -->|Ctrl+Z| B[Приостановлен]
    B -->|fg| A
B -->|bg| C[Выполняется в фоне]
    C -->|fg| A
  1. Процесс переднего плана: Занимает терминал, получает ввод с клавиатуры
  2. Фоновый процесс: Не занимает терминал, не может получать ввод
  3. Приостановленный процесс: Приостановлен, ожидает возобновления

Механизм сигналов

При выполненииfg:

  1. Система отправляет заданиюSIGCONTсигнал (продолжение выполнения)
  2. Установить группу процессов задания в качестве группы процессов переднего плана терминала
  3. Терминал перенаправляет ввод/вывод процессу

ЧАВО

Вопрос 1: Как узнать, какие фоновые задания сейчас существуют?

Используйтеjobsкоманда для просмотра:

Пример

jobs -l

Пример вывода:

[1]- 12345 运行中        sleep 100 &
[2]+ 12346 停止         vim file.txt

Вопрос 2: В чём разница между fg и bg?

Команда Функция Управление терминалом
fg Перевести задание на передний план Занимает терминал
bg Позволить приостановленному заданию продолжить выполнение в фоновом режиме Не занимает терминал

Вопрос 3: Почему программа не может получать ввод после fg?

Возможно, программа приостановлена (отображается как "stopped"); сначала нужно отправить сигнал продолжения:

Пример

kill -CONT <PID>
fg %1

Практические сценарии применения

Сценарий 1: Разработка и отладка

>

Запустите сервер разработки:

Пример

python manage.py runserver
# Нажмите Ctrl+Z, чтобы приостановить
[1]+ Stopped python manage.py runserver

Временно выполните другие команды

Возобновите работу сервера:

Пример

fg

Сценарий 2: Редактирование файлов

Пример

vim important_file.txt
# Нажмите Ctrl+Z, чтобы приостановить редактирование

# Просмотр содержимого файла
cat related_file.txt

# Вернуться к редактированию
fg

Примечания

  1. Связь с терминалом: Фоновые задания связаны с терминалом, который их запустил; закрытие терминала завершит задания
  2. Помехи от вывода: Вывод фонового задания может внезапно появиться на переднем плане, мешая текущей работе
  3. Ограничения прав: Некоторые программы, требующие взаимодействия с терминалом (например, ввод пароля), не могут выполняться в фоновом режиме
  4. Повторное использование номеров заданий: Номера заданий уникальны в пределах сеанса, но в разных сеансах терминала они считаются независимо

Дополнительные советы

Использование с nohup

Пусть задание постоянно выполняется в фоновом режиме (даже если вы выйдете из терминала):

Пример

nohup long_running_task &
# Вы можете переподключиться и продолжить позже
fg %1

Использование disown для отсоединения

Пример

python server.py &
jobs -l               # Запишите номер задания
disown %1             # Отсоединиться от терминала
# Теперь вы можете безопасно закрыть терминал

Linux 命令大全Полный список команд Linux

Другие расширения