Перевод задач в передний план в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В операционных системах Linux мультизадачность является важной возможностью, которая позволяет пользователям запускать несколько процессов одновременно. Одной из мощных функций терминалов Linux является управление задачами (job control) - возможность управлять процессами, запуская их в фоновом режиме и переводя на передний план при необходимости.

В этом практическом занятии (LabEx) вы познакомитесь с управлением задачами в Linux, с особым упором на процесс перевода фоновых задач на передний план. Вы научитесь запускать задачи в фоновом режиме, выводить список запущенных задач и переводить определенные задачи на передний план с помощью команды fg. Эти навыки ценны для повышения производительности при работе с длительно выполняющимися операциями в среде Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/bg_running("Background Running") linux/ProcessManagementandControlGroup -.-> linux/fg("Job Foregrounding") linux/ProcessManagementandControlGroup -.-> linux/bg_process("Background Management") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/chmod -.-> lab-271281{{"Перевод задач в передний план в Linux"}} linux/cd -.-> lab-271281{{"Перевод задач в передний план в Linux"}} linux/jobs -.-> lab-271281{{"Перевод задач в передний план в Linux"}} linux/bg_running -.-> lab-271281{{"Перевод задач в передний план в Linux"}} linux/fg -.-> lab-271281{{"Перевод задач в передний план в Linux"}} linux/bg_process -.-> lab-271281{{"Перевод задач в передний план в Linux"}} linux/nano -.-> lab-271281{{"Перевод задач в передний план в Linux"}} end

Создание и запуск фоновых задач

На этом этапе вы научитесь создавать скрипт, имитирующий длительно выполняемую задачу, и запускать его в фоновом режиме.

Понимание различия между процессами в переднем и фоновом режиме

В терминале 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:

  1. Создание и выполнение фоновых задач: Вы создали скрипт, имитирующий длительную операцию, и узнали, как запускать его в фоновом режиме с помощью символа &.

  2. Управление несколькими фоновыми задачами: Вы узнали, как запускать несколько фоновых задач и проверять их статус с помощью команды jobs.

  3. Перевод задач в передний план: Вы узнали, как использовать команду fg для перевода фоновых задач в передний план, будь то последняя запущенная задача или конкретная задача по ее номеру.

Эти методы управления задачами являются фундаментальными для эффективного мультизадачности в Linux. Они позволяют вам:

  • Запускать затратные по времени процессы без блокировки терминала
  • Мониторить несколько операций одновременно
  • Переключаться между задачами по мере необходимости
  • Управлять своим рабочим процессом более эффективно

По мере продолжения работы с системами Linux эти команды станут ценными инструментами в вашей повседневной работе, особенно при работе с серверами, запуске скриптов или управлении несколькими процессами.