Управление задачами в Linux

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

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

Введение

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

В рамках этого практического занятия вы научитесь:

  • Как запускать процессы в фоновом режиме
  • Как просматривать и управлять запущенными задачами
  • Как перевести фоновые задачи в передний план
  • Как приостанавливать запущенные задачи и возобновлять их позже
  • Как завершать задачи, когда они больше не нужны

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux/ProcessManagementandControlGroup -.-> linux/jobs("Job Managing") linux/ProcessManagementandControlGroup -.-> linux/bg_running("Background Running") linux/ProcessManagementandControlGroup -.-> linux/fg("Job Foregrounding") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/killall("Multi-Process Killing") linux/ProcessManagementandControlGroup -.-> linux/bg_process("Background Management") subgraph Lab Skills linux/jobs -.-> lab-271311{{"Управление задачами в Linux"}} linux/bg_running -.-> lab-271311{{"Управление задачами в Linux"}} linux/fg -.-> lab-271311{{"Управление задачами в Linux"}} linux/kill -.-> lab-271311{{"Управление задачами в Linux"}} linux/killall -.-> lab-271311{{"Управление задачами в Linux"}} linux/bg_process -.-> lab-271311{{"Управление задачами в Linux"}} end

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

На этом этапе вы научитесь запускать процесс в фоновом режиме с использованием символа амперсанда (&) и управлять им с помощью команды jobs.

Что такое фоновая задача?

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

Создание фонового процесса

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

Сначала перейдите в директорию проекта, если вы еще не находитесь в ней:

cd ~/project

Теперь создайте скрипт с именем background_task.sh с помощью текстового редактора nano:

nano ~/project/background_task.sh

Внутри редактора добавьте следующее содержимое:

#!/bin/bash
## A simple script that simulates a long-running task
count=0
while true; do
  count=$((count + 1))
  echo "Task running: iteration $count"
  sleep 5
done

Этот скрипт будет выполняться бесконечно, выводя сообщение каждые 5 секунд.

Нажмите Ctrl+O, а затем Enter, чтобы сохранить файл, а затем Ctrl+X, чтобы выйти из nano.

Далее, сделайте скрипт исполняемым:

chmod +x ~/project/background_task.sh

Теперь запустите скрипт в фоновом режиме, добавив символ & в конце команды:

~/project/background_task.sh &

Вы должны увидеть вывод, похожий на следующий:

[1] 1234

Число в квадратных скобках [1] - это номер задачи, а число после него - это идентификатор процесса (PID). Эти числа могут отличаться на вашей системе.

Проверка запущенных задач

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

jobs

Вы должны увидеть вывод, похожий на следующий:

[1]  + running    ~/project/background_task.sh

Это подтверждает, что ваш скрипт выполняется в фоновом режиме.

Чтобы получить более подробную информацию о задаче, включая ее PID, используйте:

jobs -l

Вывод должен показать номер задачи, PID и статус:

[1]  + 1234 running    ~/project/background_task.sh

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

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

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

Что такое перевод в передний план?

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

Использование команды fg

Убедитесь, что скрипт background_task.sh, запущенный на предыдущем этапе, все еще выполняется. Вы можете проверить это с помощью команды:

jobs

В списке запущенных задач должен быть ваш скрипт.

Чтобы перевести задачу в передний план, используйте команду fg, за которой следует номер задачи с знаком процента:

fg %1

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

fg

После выполнения команды скрипт будет переведен в передний план, и вы увидите его вывод прямо в терминале:

Task running: iteration X
Task running: iteration X+1
...

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

Остановка задачи в переднем плане

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

^C

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

Чтобы убедиться, что задача больше не выполняется, выполните команду:

jobs

Должен быть пустой вывод, что означает, что нет запущенных фоновых задач.

Запустим наш скрипт в фоновом режиме еще раз для следующего этапа:

~/project/background_task.sh &

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

[1] 1345

Помните, что номер задачи и PID могут отличаться на вашей системе.

Приостановка и продолжение задач

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

Приостановка задачи в переднем плане

Сначала переведем нашу фоновую задачу в передний план:

fg %1

Теперь вы должны увидеть вывод скрипта в терминале. Чтобы приостановить эту задачу в переднем плане, нажмите Ctrl+Z:

^Z

Вы должны увидеть сообщение, похожее на следующее:

[1]  + suspended  ~/project/background_task.sh

Это означает, что задача была приостановлена. Задача по-прежнему загружена в память, но не выполняется - она, по сути, "на паузе".

Чтобы убедиться, что задача приостановлена, выполните команду:

jobs

Вы должны увидеть вывод, похожий на следующий:

[1]  + suspended  ~/project/background_task.sh

Продолжение приостановленной задачи в фоновом режиме

Вы можете продолжить выполнение приостановленной задачи либо в переднем, либо в фоновом режиме. Чтобы продолжить ее в фоновом режиме, используйте команду bg, за которой следует номер задачи:

bg %1

Вы должны увидеть сообщение, подтверждающее, что задача продолжена в фоновом режиме:

[1]  + continued  ~/project/background_task.sh

Убедитесь, что задача теперь выполняется в фоновом режиме:

jobs

Вывод должен показать, что статус задачи изменился с "suspended" (приостановлена) на "running" (выполняется):

[1]  + running    ~/project/background_task.sh

Продолжение приостановленной задачи в переднем плане

Приостановим задачу еще раз. Сначала переведем ее в передний план:

fg %1

Затем нажмите Ctrl+Z, чтобы приостановить ее:

^Z

Теперь, вместо использования bg для продолжения задачи в фоновом режиме, используйте fg для продолжения ее в переднем плане:

fg %1

Задача продолжит выполнение, и вы снова увидите ее вывод в терминале.

Остановим задачу, нажав Ctrl+C:

^C

Это завершит задачу и вернет вас к приглашению для ввода команд.

Использование управления задачами в вашем рабочем процессе

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

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

Для следующего этапа запустите фоновую задачу снова:

~/project/background_task.sh &

Завершение фоновых задач

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

Определение задач для завершения

Сначала проверим, какие задачи в настоящее время выполняются:

jobs

Вы должны увидеть, что ваша фоновая задача запущена:

[1]  + running    ~/project/background_task.sh

Если вы хотите получить более подробную информацию, включая идентификатор процесса (PID), используйте:

jobs -l

Это выведет информацию, похожую на следующую:

[1]  + 1456 running    ~/project/background_task.sh

Обратите внимание на PID (число после номера задачи), так как его можно использовать для завершения процесса.

Метод 1: Завершение задачи с использованием ее номера

Самый простой способ завершить фоновую задачу - использовать команду kill с номером задачи:

kill %1

Проверьте, была ли задача завершена:

jobs

Вы, возможно, увидите:

[1]  + terminated  ~/project/background_task.sh

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

kill -9 %1

Флаг -9 отправляет сигнал SIGKILL, который принудительно завершает процесс без возможности его корректного завершения.

Метод 2: Завершение задачи с использованием ее PID

Запустим еще один экземпляр нашего скрипта в фоновом режиме:

~/project/background_task.sh &

Вы должны увидеть вывод, показывающий номер задачи и PID:

[1] 1567

Чтобы завершить эту задачу, используя ее PID, введите:

kill 1567

Замените 1567 на фактический PID вашей задачи.

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

jobs

Метод 3: Использование имени процесса с командой killall

Запустим еще один экземпляр нашего скрипта:

~/project/background_task.sh &

Если у вас запущено несколько экземпляров одного и того же процесса, вы можете завершить их все сразу, используя команду killall:

killall background_task.sh

Эта команда завершает все процессы с именем background_task.sh.

Проверьте, что больше нет запущенных задач:

jobs

Должен быть пустой вывод, что означает, что все фоновые задачи были завершены.

Понимание сигналов завершения

При использовании команды kill вы отправляете сигнал процессу. По умолчанию команда kill отправляет сигнал SIGTERM (сигнал 15), который просит процесс корректно завершиться. Если процесс не реагирует на SIGTERM, вы можете использовать SIGKILL (сигнал 9) для принудительного завершения:

kill -TERM %1 ## То же, что и kill %1
kill -KILL %1 ## То же, что и kill -9 %1

Другие полезные сигналы включают:

  • SIGHUP (сигнал 1): Часто используется для перезагрузки файлов конфигурации.
  • SIGINT (сигнал 2): То же, что нажатие Ctrl+C.
  • SIGSTOP (сигнал 19): Приостанавливает процесс (не может быть перехвачен или проигнорирован).
  • SIGCONT (сигнал 18): Продолжает остановленный процесс.

Для последней демонстрации запустим нашу фоновую задачу еще раз и затем завершим ее:

~/project/background_task.sh &
jobs
kill %1
jobs

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

Резюме

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

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

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

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

  4. Приостановка и продолжение задач: Вы научились приостанавливать запущенные задачи в переднем плане с помощью Ctrl+Z и продолжать их выполнение либо в переднем (fg), либо в фоновом (bg) режиме.

  5. Завершение задач: Вы изучили различные способы завершения задач, когда они больше не нужны, включая использование команды kill с номерами задач или PID, а также использование killall для завершения нескольких процессов по имени.

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

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