Введение
В операционных системах Linux мультизадачность является важной возможностью, которая позволяет пользователям запускать несколько процессов одновременно. Одной из мощных функций терминалов Linux является управление задачами (job control) - возможность управлять процессами, запуская их в фоновом режиме и переводя на передний план при необходимости.
В этом практическом занятии (LabEx) вы познакомитесь с управлением задачами в Linux, с особым упором на процесс перевода фоновых задач на передний план. Вы научитесь запускать задачи в фоновом режиме, выводить список запущенных задач и переводить определенные задачи на передний план с помощью команды fg. Эти навыки ценны для повышения производительности при работе с длительно выполняющимися операциями в среде Linux.
Создание и запуск фоновых задач
На этом этапе вы научитесь создавать скрипт, имитирующий длительно выполняемую задачу, и запускать его в фоновом режиме.
Понимание различия между процессами в переднем и фоновом режиме
В терминале Linux процессы могут запускаться либо в переднем, либо в фоновом режиме:
- Процесс в переднем плане (Foreground process): Когда команда запускается в переднем плане, она занимает ваш терминал до завершения выполнения. Вы не можете запускать другие команды, пока этот процесс не завершится.
- Процесс в фоновом режиме (Background process): Когда команда запускается в фоновом режиме, она выполняется "за кулисами", в то время как ваш терминал остается свободным для выполнения других задач.
Начнем с перехода в директорию проекта:
cd ~/project
Теперь создадим простой скрипт, который имитирует длительно выполняемую задачу. Мы будем использовать его для демонстрации операций в фоновом и переднем режимах:
nano long_running_task.sh
В редакторе nano введите следующий код:
#!/bin/bash
echo "Starting a long task..."
sleep 60 ## This will pause for 60 seconds
echo "Task completed."
Для сохранения файла нажмите Ctrl+O, затем Enter, а затем Ctrl+X для выхода из nano.
Далее, сделайте скрипт исполняемым с помощью следующей команды:
chmod +x long_running_task.sh
Запустим этот скрипт в фоновом режиме, добавив амперсанд (&) в конце команды:
./long_running_task.sh &
Вы должны увидеть вывод, похожий на следующий:
[1] 1234
Starting a long task...
Число в квадратных скобках [1] - это номер задачи (job number), а число после него (в этом примере 1234) - это идентификатор процесса (process ID). Теперь ваш терминал свободен для ввода других команд, в то время как скрипт продолжает выполняться в фоновом режиме.
Управление несколькими фоновыми задачами
На этом этапе вы научитесь запускать несколько фоновых задач и проверять их статус.
Сначала запустим еще один экземпляр нашего скрипта в фоновом режиме:
./long_running_task.sh &
Вы должны увидеть отображенный новый номер задачи и идентификатор процесса, а также сообщение "Starting a long task...".
Проверка фоновых задач
Для просмотра списка всех задач, запущенных в фоновом режиме, используйте команду jobs:
jobs
Вывод должен выглядеть примерно так:
[1]- Running ./long_running_task.sh &
[2]+ Running ./long_running_task.sh &
В этом выводе показаны:
- Номера задач в квадратных скобках
[1]и[2] - Статус каждой задачи (
Running) - Выполненная команда
- Символ
+указывает на "текущую" задачу (задачу, запущенную или использованную последней) - Символ
-указывает на задачу, которая станет текущей, если текущая задача завершится
Запустим третью фоновую задачу:
./long_running_task.sh &
Проверим список задач еще раз:
jobs
Теперь в списке должны быть отображены три запущенные задачи.
Перемещение задач в передний план
На этом этапе вы научитесь переводить фоновые задачи в передний план с помощью команды fg.
Использование команды fg
Команда fg переводит фоновую задачу в передний план, делая ее активным процессом в вашем терминале. Когда задача находится в переднем плане, она может получать ввод с клавиатуры, и ее вывод отображается непосредственно в терминале.
Для перевода последней запущенной фоновой задачи (отмеченной знаком + в выводе команды jobs) в передний план просто введите:
fg
Вы должны увидеть, как команда выполняется в переднем плане, и ваш терминал будет занят до завершения выполнения команды. Вывод будет выглядеть так:
./long_running_task.sh
И если задача все еще выполняется, вам придется подождать, пока она завершится. Когда задача завершится, вы увидите:
Task completed.
Если вам нужно прервать процесс в переднем плане до его завершения, нажмите Ctrl+C.
Запустим еще одну фоновую задачу:
./long_running_task.sh &
Теперь проверим список задач:
jobs
Перемещение конкретной задачи в передний план
На этом этапе вы научитесь переводить конкретную фоновую задачу в передний план, используя ее номер задачи.
Использование команды fg с номерами задач
Когда у вас есть несколько фоновых задач, вы можете перевести конкретную задачу в передний план, указав ее номер задачи с помощью команды fg.
Сначала убедимся, что у нас запущено несколько задач. Запустим несколько новых фоновых задач:
./long_running_task.sh &
./long_running_task.sh &
Проверим список задач и их номера:
jobs
Для перевода конкретной задачи в передний план используйте формат fg %jobnumber. Например, чтобы перевести задачу с номером 1 в передний план:
fg %1
Вывод показывает, что команда выполняется в переднем плане:
./long_running_task.sh
Подождите, пока задача завершится, или нажмите Ctrl+C, чтобы прервать ее.
Теперь попробуйте перевести другую задачу в передний план. Например, если у вас есть задача с номером 2:
fg %2
Эта техника полезна, когда вам нужно переключаться между несколькими задачами и уделять внимание определенному процессу по мере необходимости.
Резюме
В этом практическом занятии вы научились важным навыкам управления процессами в среде Linux:
Создание и выполнение фоновых задач: Вы создали скрипт, имитирующий длительную операцию, и узнали, как запускать его в фоновом режиме с помощью символа
&.Управление несколькими фоновыми задачами: Вы узнали, как запускать несколько фоновых задач и проверять их статус с помощью команды
jobs.Перевод задач в передний план: Вы узнали, как использовать команду
fgдля перевода фоновых задач в передний план, будь то последняя запущенная задача или конкретная задача по ее номеру.
Эти методы управления задачами являются фундаментальными для эффективного мультизадачности в Linux. Они позволяют вам:
- Запускать затратные по времени процессы без блокировки терминала
- Мониторить несколько операций одновременно
- Переключаться между задачами по мере необходимости
- Управлять своим рабочим процессом более эффективно
По мере продолжения работы с системами Linux эти команды станут ценными инструментами в вашей повседневной работе, особенно при работе с серверами, запуске скриптов или управлении несколькими процессами.



