Завершение фоновых задач
На этом этапе вы узнаете различные способы завершения фоновых задач, когда они больше не нужны. Корректное завершение задач важно для освобождения системных ресурсов и поддержания производительности системы.
Определение задач для завершения
Сначала проверим, какие задачи в настоящее время выполняются:
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
Эта последовательность запускает задачу, подтверждает, что она запущена, завершает ее и затем проверяет, что она больше не выполняется.