Команда fg в Linux
fgЭто важная команда для управления процессами в системах Linux/Unix, её полное название — "foreground". Её основная функция — переключать задачи, выполняющиеся в фоновом режиме, на передний план для продолжения выполнения.
Зачем нужна команда fg
Представьте, что вы делаете заказ в ресторане:
- Вы заказываете основное блюдо (процесс переднего плана)
- В то же время попросите кухню приготовить десерт (фоновый процесс)
- Когда вы закончите основное блюдо, вы можете попросить официанта принести вам десерт (команда fg)
В Linux этот механизм переключения задач между передним и фоновым режимами позволяет вам:
- Гибко управляйте порядком выполнения нескольких задач
- Временно приостановите текущую задачу, чтобы заняться более срочными делами
- Эффективно используйте сеансы терминала
Базовый синтаксис
fg [作业标识]
Описание параметра
| Параметр | Описание |
|---|---|
| Без параметра | Возобновите последнее фоновое задание |
| %n | Возобновите задание с номером n |
| %str | Возобновите задание, начинающееся с str |
| %?str | Возобновите задание, содержащее str |
| %+ или %% | Эквивалентно отсутствию параметра; возобновляет последнее задание |
| %- | Возобновите предпоследнее фоновое задание |
Примеры использования
Пример 1: Базовое использование
Запустите длительную задачу и поместите её в фоновый режим:
sleep 60 & [1] 12345 # 系统返回作业号 [1] 和进程ID 12345
Просмотрите текущий список заданий:
jobs [1]+ 运行中 sleep 60 &
Верните задание на передний план:
fg %1 # 或者简写为 fg
Пример 2: Возобновление конкретного задания
Пример
python script1.py &
python script2.py &
# Просмотр списка заданий
jobs
[1]- Выполняется python script1.py&
[2]+ Выполняется python script2.py&
# Возобновить первое задание
fg %1
Как это работает
Переход состояния процесса
Пример
A[Выполняется на переднем плане] -->|Ctrl+Z| B[Приостановлен]
B -->|fg| A
B -->|bg| C[Выполняется в фоне]
C -->|fg| A
- Процесс переднего плана: Занимает терминал, получает ввод с клавиатуры
- Фоновый процесс: Не занимает терминал, не может получать ввод
- Приостановленный процесс: Приостановлен, ожидает возобновления
Механизм сигналов
При выполненииfg:
- Система отправляет заданию
SIGCONTсигнал (продолжение выполнения) - Установить группу процессов задания в качестве группы процессов переднего плана терминала
- Терминал перенаправляет ввод/вывод процессу
ЧАВО
Вопрос 1: Как узнать, какие фоновые задания сейчас существуют?
Используйтеjobsкоманда для просмотра:
Пример
Пример вывода:
[1]- 12345 运行中 sleep 100 & [2]+ 12346 停止 vim file.txt
Вопрос 2: В чём разница между fg и bg?
| Команда | Функция | Управление терминалом |
|---|---|---|
| fg | Перевести задание на передний план | Занимает терминал |
| bg | Позволить приостановленному заданию продолжить выполнение в фоновом режиме | Не занимает терминал |
Вопрос 3: Почему программа не может получать ввод после fg?
Возможно, программа приостановлена (отображается как "stopped"); сначала нужно отправить сигнал продолжения:
Пример
fg %1
Практические сценарии применения
Сценарий 1: Разработка и отладка
>Запустите сервер разработки:
Пример
# Нажмите Ctrl+Z, чтобы приостановить
[1]+ Stopped python manage.py runserver
Временно выполните другие команды
Возобновите работу сервера:
Пример
Сценарий 2: Редактирование файлов
Пример
# Нажмите Ctrl+Z, чтобы приостановить редактирование
# Просмотр содержимого файла
cat related_file.txt
# Вернуться к редактированию
fg
Примечания
- Связь с терминалом: Фоновые задания связаны с терминалом, который их запустил; закрытие терминала завершит задания
- Помехи от вывода: Вывод фонового задания может внезапно появиться на переднем плане, мешая текущей работе
- Ограничения прав: Некоторые программы, требующие взаимодействия с терминалом (например, ввод пароля), не могут выполняться в фоновом режиме
- Повторное использование номеров заданий: Номера заданий уникальны в пределах сеанса, но в разных сеансах терминала они считаются независимо
Дополнительные советы
Использование с nohup
Пусть задание постоянно выполняется в фоновом режиме (даже если вы выйдете из терминала):
Пример
# Вы можете переподключиться и продолжить позже
fg %1
Использование disown для отсоединения
Пример
jobs -l # Запишите номер задания
disown %1 # Отсоединиться от терминала
# Теперь вы можете безопасно закрыть терминал
Полный список команд Linux