Введение
В этом лабораторном занятии вы научитесь основным навыкам управления процессами в Linux, сосредоточившись на том, как определять и завершать процессы. Управление процессами является фундаментальным навыком для любого пользователя или администратора Linux, так как оно позволяет эффективно управлять системными ресурсами.
Вы научитесь использовать команду ps для определения запущенных процессов и команду kill для их завершения при необходимости. Эти инструменты являются обязательными для поддержания производительности системы и решения проблем с нереагирующими приложениями.
К концу этого лабораторного занятия вы сможете определять процессы, понимать их атрибуты и завершать их различными методами. Эти навыки ценны для устранения неполадок и эффективного управления системами Linux.
Идентификация процессов
В Linux каждая запущенная программа или приложение считается процессом. Каждый процесс имеет уникальный идентификатор, называемый идентификатором процесса (Process ID, PID). Прежде чем вы сможете завершить процесс, вам нужно определить его по его PID.
Начнем с изучения того, как просматривать запущенные процессы с помощью команды ps. Эта команда отображает информацию о активных процессах в вашей системе.
Сначала откройте терминал в среде виртуальной машины LabEx и выполните следующую команду:
ps
Вы увидите базовый список процессов, запущенных в текущей сессии терминала. Вывод должен выглядеть примерно так:
PID TTY TIME CMD
2104 pts/0 00:00:00 zsh
2116 pts/0 00:00:00 ps
Этот вывод показывает:
PID: Номер идентификатора процессаTTY: Тип терминала, на котором запущен процессTIME: Количество времени ЦП, использованное процессомCMD: Команда, которая запустила процесс
Чтобы увидеть более полный список всех процессов, запущенных на системе, используйте следующую команду с дополнительными параметрами:
ps -aux
Параметры означают:
-a: Показать процессы всех пользователей-u: Отобразить подробный формат, ориентированный на пользователя-x: Включить процессы без управляющего терминала
Вывод будет намного длиннее и более подробным, показывая все процессы, запущенные на системе:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 167936 11876 ? Ss 10:30 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 10:30 0:00 [kthreadd]
...
labex 2104 0.0 0.1 11108 5456 pts/0 Ss 10:35 0:00 zsh
labex 2130 0.0 0.0 9828 3384 pts/0 R+ 10:36 0:00 ps -aux
Теперь создадим простой фоновый процесс, который мы сможем использовать для практики:
sleep 300 &
sleep_pid=$!
Эта команда запускает процесс, который будет "спать" (ничего не делать) в течение 300 секунд (5 минут). Символ & запускает его в фоновом режиме, а $! захватывает PID последнего запущенного фонового процесса.
Убедимся, что процесс запущен:
echo "The sleep process ID is: $sleep_pid"
ps | grep sleep
Вы должны увидеть вывод, похожий на следующий:
The sleep process ID is: 2135
2135 pts/0 00:00:00 sleep
Теперь вы знаете, как определить процессы и найти их PID. На следующем шаге мы научимся завершать этот процесс.
Завершение процессов с помощью команды 'kill'
Теперь, когда вы определили процесс и его PID, вы можете научиться завершать его с помощью команды kill. Команда kill отправляет сигнал процессу, инструкцию ему завершиться.
Базовый синтаксис команды kill выглядит следующим образом:
kill [options] <PID>
Завершим процесс sleep, который мы создали на предыдущем шаге. Мы сохранили его PID в переменной $sleep_pid. Используйте следующую команду для завершения этого процесса:
kill $sleep_pid
Если вы забыли PID, вы можете снова найти его с помощью следующей команды:
ps | grep sleep
После выполнения команды kill убедитесь, что процесс был завершен:
ps | grep sleep
Если процесс был успешно завершен, вы не должны увидеть никакого вывода или в выводе должен быть только сам процесс grep. Это означает, что процесс sleep больше не запущен.
Если вы хотите быть уверены, вы можете снова использовать команду ps для вывода списка всех процессов:
ps -aux | grep sleep
Возможно, это покажет что-то вроде этого:
labex 2156 0.0 0.0 7236 720 pts/0 S+ 10:40 0:00 grep --color=auto sleep
Единственным показанным процессом является команда grep сама по себе, что указывает на то, что процесс sleep был завершен.
По умолчанию команда kill отправляет сигнал TERM (завершение) процессу, что позволяет процессу корректно завершиться после выполнения любых операций по очистке. В большинстве случаев этого достаточно для завершения процесса.
Теперь вы успешно определили и завершили процесс с помощью команды kill, что является фундаментальным навыком для управления процессами в Linux.
Понимание сигналов команды kill
В Linux команда kill может отправлять различные типы сигналов процессам, а не только сигналы завершения. Понимание этих сигналов позволяет вам лучше контролировать процесс завершения.
Сначала посмотрим все доступные сигналы, запустив следующую команду:
kill -l
Эта команда выведет список всех сигналов, которые может отправить команда kill. Вывод будет выглядеть примерно так:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
Наиболее часто используемые сигналы:
SIGTERM(15): Сигнал по умолчанию, отправляемый командойkill. Просит процесс корректно завершиться.SIGKILL(9): Принудительно завершает процесс немедленно. Используйте, если процесс не реагирует на SIGTERM.SIGHUP(1): Традиционно используется для сброса или перезагрузки конфигурационных файлов.SIGINT(2): Отправляется, когда вы нажимаете Ctrl+C в терминале.
Создадим еще один процесс sleep для практики:
sleep 300 &
sleep_pid=$!
echo "The new sleep process ID is: $sleep_pid"
Теперь отправим конкретный сигнал процессу, используя номер сигнала:
kill -15 $sleep_pid
Это эквивалентно команде kill по умолчанию, так как она отправляет SIGTERM (сигнал 15).
Убедимся, что процесс был завершен:
ps | grep sleep
Создадим еще один процесс sleep, чтобы продемонстрировать сигнал SIGKILL:
sleep 300 &
sleep_pid=$!
echo "The third sleep process ID is: $sleep_pid"
Теперь используем сигнал SIGKILL, чтобы принудительно завершить процесс:
kill -9 $sleep_pid
Убедимся, что процесс был завершен:
ps | grep sleep
Сигнал SIGKILL (9) является "спасательным кругом", потому что:
- Он не позволяет процессу выполнить очистку после себя.
- Он может оставить ресурсы в неконсистентном состоянии.
- Он может привести к потере данных, если процесс записывал данные.
Всегда сначала попробуйте использовать SIGTERM, и только используйте SIGKILL, если процесс не реагирует на SIGTERM.
Расширенное управление процессами
Linux предоставляет дополнительные команды для управления процессами помимо базовых команд ps и kill. Эти инструменты обеспечивают большую гибкость и удобство при идентификации и завершении процессов.
Команда pgrep
Команда pgrep позволяет искать процессы по имени, не требуя визуального просмотра вывода команды ps:
pgrep sleep
Эта команда найдет все процессы, в имени которых есть "sleep", и выведет их PID.
Команда pkill
Команда pkill объединяет функциональность команд pgrep и kill — она ищет процессы по имени и отправляет им сигнал:
## Запустить два процесса sleep
sleep 300 &
sleep 300 &
## Завершить все процессы sleep
pkill sleep
Убедитесь, что все процессы sleep были завершены:
ps | grep sleep
Команда killall
Подобно команде pkill, команда killall завершает процессы по имени:
## Запустить еще два процесса sleep
sleep 300 &
sleep 300 &
## Завершить все процессы sleep
killall sleep
Проверьте еще раз:
ps | grep sleep
Приоритет процессов с помощью nice и renice
Linux также позволяет контролировать приоритет процессов с помощью команд nice и renice.
Запустим процесс с более низким приоритетом:
nice -n 10 sleep 300 &
Значение nice может быть в диапазоне от -20 (наивысший приоритет) до 19 (наименьший приоритет). По умолчанию оно равно 0. Только пользователь root может устанавливать отрицательные значения nice.
Вы можете изменить приоритет запущенного процесса с помощью команды renice:
sleep_pid=$!
echo "Sleep process ID with lower priority: $sleep_pid"
renice -n 15 -p $sleep_pid
Проверим новый приоритет:
ps -o pid,nice,cmd -p $sleep_pid
Наконец, завершим этот процесс:
kill $sleep_pid
Эти продвинутые команды управления процессами обеспечивают более эффективные способы управления множеством процессов и контроля системных ресурсов, что особенно полезно на загруженных системах или при устранении неполадок с производительностью.
Резюме
В этом практическом занятии вы изучили основные навыки управления процессами в Linux, которые ценны для системного администрирования и устранения неполадок:
Идентификация процессов: Вы узнали, как использовать команду
psдля вывода списка запущенных процессов и нахождения их идентификаторов процессов (PID).Завершение процессов: Вы практиковались в использовании команды
killдля отправки сигналов завершения процессам по их PID.Понимание сигналов команды kill: Вы изучили различные типы сигналов, которые можно отправить процессам, включая SIGTERM (15) для корректного завершения и SIGKILL (9) для принудительного завершения.
Продвинутое управление процессами: Вы узнали о более мощных инструментах, таких как
pgrep,pkillиkillall, для поиска и завершения процессов по имени, а также о том, как контролировать приоритет процессов с помощьюniceиrenice.
Эти навыки позволяют вам:
- Эффективно отслеживать системные процессы
- Завершать нереагирующие приложения
- Управлять системными ресурсами
- Устранять неполадки с производительностью
Управление процессами является фундаментальным аспектом системного администрирования в Linux, и команды, которые вы изучили в этом практическом занятии, ежедневно используются системными администраторами и пользователями Linux для поддержания производительности и стабильности системы.



