Управление фоновыми задачами

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

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

Введение

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

Результаты

По завершению этого лабораторного занятия вы сможете:

  • Запускать команды в фоновом режиме с использованием оператора &
  • Списывать и отслеживать фоновые задачи с использованием команды jobs
  • Переводить фоновые задачи в передний план с использованием команды fg
  • Останавливать фоновые задачи с использованием команды kill
  • Понять, что фоновые задачи специфичны для терминала

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/CompressionandArchivingGroup(["Compression and Archiving"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicSystemCommandsGroup -.-> linux/sleep("Execution Delaying") linux/FileandDirectoryManagementGroup -.-> linux/find("File Searching") linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/fg("Job Foregrounding") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/bg_process("Background Management") linux/CompressionandArchivingGroup -.-> linux/tar("Archiving") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") subgraph Lab Skills linux/sleep -.-> lab-43{{"Управление фоновыми задачами"}} linux/find -.-> lab-43{{"Управление фоновыми задачами"}} linux/jobs -.-> lab-43{{"Управление фоновыми задачами"}} linux/fg -.-> lab-43{{"Управление фоновыми задачами"}} linux/kill -.-> lab-43{{"Управление фоновыми задачами"}} linux/bg_process -.-> lab-43{{"Управление фоновыми задачами"}} linux/tar -.-> lab-43{{"Управление фоновыми задачами"}} linux/ping -.-> lab-43{{"Управление фоновыми задачами"}} end

Запуск команды в фоновом режиме

Начнем с запуска простой команды в фоновом режиме.

  1. Откройте терминал. Вы должны находиться в директории /home/labex/project. Если это не так, вы можете перейти в эту директорию, введя:

    cd /home/labex/project
  2. Мы будем использовать команду sleep для имитации длительно выполняющегося процесса. Запустите следующую команду:

    sleep 600 &

    Команда sleep приостанавливает выполнение на указанное количество секунд (в данном случае 600 секунд или 10 минут). Символ & в конце сообщает Linux запустить эту команду в фоновом режиме.

  3. После запуска этой команды вы увидите вывод, похожий на следующий:

    [1] 1234

    Этот вывод показывает две важные части информации:

    • [1] - это номер задачи (job number). Он используется для обращения к этой конкретной фоновой задаче.
    • 1234 - это идентификатор процесса (PID). Это уникальный идентификатор запущенного процесса.
  4. Вы заметите, что сразу же вернется командная строка. Это происходит потому, что процесс запущен в фоновом режиме, и вы можете продолжать использовать терминал.

  5. Теперь проверим статус нашей фоновой задачи:

    jobs

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

    [1]+  Running                 sleep 600 &

    Это говорит вам, что задача номер 1 запущена и это команда sleep 600, которую мы только что запустили.

  6. Важное примечание: Фоновые задачи специфичны для сеанса терминала, в котором они были запущены. Если вы откроете новое окно или вкладку терминала и запустите там команду jobs, то фоновые задачи из исходного терминала не будут отображены. Это ключевой концепт для понимания того, как работают фоновые задачи в Linux.

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

Теперь, когда мы запустили одну задачу в фоновом режиме, давайте попробуем запустить несколько задач одновременно. Мы будем использовать различные команды, чтобы продемонстрировать гибкость фоновых задач.

  1. Давайте запустим еще несколько фоновых задач. Введите эти команды по очереди:

    ping -c 100 google.com > ping_results.txt &
    find /home -name "*.log" > log_files.txt &
    sleep 1200 &

    Каждая из этих команд запустит новую фоновую задачу. Вы увидите номер задачи и PID для каждой из них.

  2. Теперь проверим статус всех наших фоновых задач:

    jobs

    Вы должны увидеть вывод, в котором перечислены все четыре задачи (включая ту, которая была запущена на шаге 1):

    [1]   Running                 sleep 600 &
    [2]   Running                 ping -c 100 google.com > ping_results.txt &
    [3]-  Running                 find /home -name "*.log" > log_files.txt &
    [4]+  Running                 sleep 1200 &

    Знак + рядом с задачей 4 указывает, что это самая недавно запущенная фоновая задача. Знак - рядом с задачей 3 означает, что эта задача станет текущей, если задача 4 завершится.

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

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

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

  1. Сначала выведите список текущих задач:

    jobs

    Это обновит информацию о том, какие задачи в настоящее время работают в фоновом режиме.

  2. Мы переведем одну из длительно выполняющихся задач в передний план. Выберите номер задачи из списка (пусть это будет задача номер 3, но используйте тот номер, который соответствует задаче, которая все еще выполняется в вашем списке). Чтобы перевести ее в передний план, используйте команду fg, за которой следует номер задачи:

    fg %3

    %3 относится к номеру задачи. Символ % сообщает оболочке, что вы ссылаетесь на номер задачи, а не на идентификатор процесса (PID).

  3. После выполнения этой команды вы увидите, что команда выполняется в переднем плане, и ваш терминал будет "залочен" до тех пор, пока задача не завершится или вы не остановите ее.

  4. Чтобы остановить задачу и восстановить контроль над терминалом, нажмите Ctrl+C. Это отправит сигнал прерывания текущему процессу в переднем плане.

  5. Теперь проверим наши задачи еще раз:

    jobs

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

Остановка фоновой задачи

Теперь давайте научимся останавливать фоновую задачу без перевода ее в передний план.

  1. Сначала выведите список текущих задач:

    jobs

    Это покажет, какие задачи все еще выполняются.

  2. Мы остановим одну из оставшихся фоновых задач. Выберите номер задачи из списка (пусть это будет задача номер 2, но используйте тот номер, который соответствует задаче, которая все еще выполняется в вашем списке). Чтобы остановить ее, используем команду kill, за которой следует номер задачи:

    kill %2

    %2 относится к номеру задачи, который вы выбрали. Опять же, символ % указывает, что мы ссылаемся на номер задачи.

  3. Команда kill отправляет сигнал завершения указанной задаче. По умолчанию она отправляет сигнал, который позволяет процессу корректно завершить свою работу.

  4. Проверьте список задач еще раз:

    jobs

    Вы должны увидеть, что задача, которую вы остановили, больше не отображается в списке. Это подтверждает, что она была успешно завершена.

Использование фоновых задач с другими командами

Теперь, когда мы потренировались с различными командами, давайте попробуем использовать фоновые задачи с еще одной практической командой.

  1. Мы будем использовать команду tar для создания сжатого архива вашего домашнего каталога в фоновом режиме:

    tar -czf home_backup.tar.gz /home/labex &

    Эта команда создает сжатый tar - архив вашего домашнего каталога.

  2. Вы увидите номер задачи и PID, как и в случае с предыдущими командами.

  3. Проверьте статус задачи:

    jobs

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

  4. Пока она выполняется, вы можете продолжать использовать терминал для других задач. Вот в чем сила фоновых задач!

  5. Через некоторое время проверьте, завершилась ли команда:

    jobs

    Если она больше не отображается в списке, значит, выполнение завершено.

  6. Теперь давайте убедимся, что архив был создан:

    ls -l home_backup.tar.gz

    Это покажет вам детали файла архива, если он был успешно создан.

Резюме

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

  1. Запуск команд в фоновом режиме с использованием оператора &
  2. Вывод списка и мониторинг фоновых задач с помощью команды jobs
  3. Перевод фоновых задач в передний план с помощью команды fg
  4. Остановка фоновых задач с использованием команды kill
  5. Применение этих концепций в практических сценариях, таких как диагностика сети, поиск файлов и создание архивов

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

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