Управление процессами в Linux может показаться запутанным для нового системного администратора (sysadmin) на первый взгляд. Но с небольшим объяснением и демонстрацией вы узнаете, что нахождение и завершение процессов в Linux – это просто вопрос использования инструментов командной строки, таких как ps
и kill
.
В этой статье вы узнаете команды для поиска работающих и ошибочных процессов, завершения (прерывания) работающих процессов, поиска фоновых процессов и многого другого в любой операционной системе Linux.
К концу статьи вы будете управлять процессами на основе идентификационных номеров процессов (PID) с помощью командной строки, как настоящий профессионал Linux. Продолжайте чтение, чтобы узнать все о командах управления процессами в Linux!
Предварительные требования
В этой статье будет рассмотрено управление процессами в Linux. Если вы хотите быть практичным, вам понадобятся следующие компоненты:
- A Linux host, which can be a virtual machine or a physical machine.
- Чтобы попробовать примеры PowerShell, установите PowerShell 7.1.1 на хосте Linux.
- A non-root user account. While root access is not required, there will be an example where the root user can kill the running process of another user.
Выбор дистрибутива Linux, который вы хотите использовать, зависит от вас. В этой статье будет использоваться Ubuntu 20.04 LTS. Однако команды являются стандартными для операционной системы Linux.
Готовы начать? Хорошо, приступим.
Управление процессами в Linux
Время от времени вы можете столкнуться с ситуацией, когда вам нужно остановить запущенный процесс в системе Linux. Например, у вас может быть скрипт bash, который запускается по расписанию. Этот скрипт настроен на запуск от имени другого пользователя с помощью задания cron (планировщик процессов Linux).
Иногда этот скрипт порождает некорректные процессы, которые могут вызвать сбой скрипта. Как вы убиваете эти некорректные процессы, не перезагружая систему или не останавливая скрипт?
В следующих разделах вы узнаете о командах, используемых для поиска и завершения или убийства процессов в системе Linux. Каждый раздел будет строиться на предыдущем. Вы узнаете о командах ps
, top
, pgrep
, kill
и pkill
, все они являются встроенными в Linux.
В качестве бонуса включены эквивалентные команды PowerShell Get-Process
и Stop-Process
, если вам не нравятся встроенные команды Linux.
Инструменты для поиска процессов
Перед тем, как убить процесс, вам необходимо найти правильный процесс для цели. Уникальный идентификатор PID позволяет точно нацелиться. Читайте дальше, чтобы узнать, как найти правильные процессы для завершения.
Использование команды ps
для отображения информации о процессах
Команда ps
или Статус процесса отображает информацию о активных процессах в системе Linux. Вы можете найти выполняющийся процесс и даже фоновые процессы с помощью ps
.
Команда ps
по умолчанию отображает все процессы для эффективной идентификации пользователя (EUID) текущего пользователя. Выполнение команды ps
, как показано ниже, вернет каждый выполняющийся процесс, который ваш пользователь может завершить.

bkindle
.Поиск расширенной информации о процессе с использованием команды top
Что, если вы хотите найти постоянно обновляемую информацию о выполняющихся процессах и системных метриках, в таком случае вы можете использовать команду top
. В отличие от команды ps
, команда top
обновляет информацию о процессе на экране через определенный интервал времени.
При выполнении команды top
вы увидите не только идентификатор процесса (PID). Вместе с деталями процесса отображаются проценты CPU и памяти, значения Nice (приоритет процесса планирования CPU) и приоритет процесса (PR), установленный ядром Linux.
Для нового или опытного системного администратора команда top
часто является основным инструментом для управления основными системными ресурсами и процессами. Как показано ниже, вывод команды top
отображает больше информации о процессе, чем команда ps
, включая общие системные метрики.

top
command on Ubuntu Desktop 20.04 LTS showing all running PID’s.htop
– это улучшенный вариант top
, который включает различные улучшения, такие как цветной вывод в терминале.
Предположим, вы хотите проверить, какие ресурсы по памяти или ЦП использовал процесс. В этом случае вы можете использовать ключ p
команды top
, как показано ниже.

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

top
command displaying only processes for the user bkindle
.Нахождение конкретных идентификаторов процессов с помощью команды pgrep
Изначально команда для Solaris, pgrep
была портирована для использования в Linux. Объединяя поиск силы команды grep
и управления процессами команды ps
, pgrep
предлагает гибкость в поиске точного процесса для цели.
Хотя команда ps
отображает больше информации, pgrep
предназначен для возврата только идентификаторов процессов. pgrep
помогает найти процесс с помощью множества доступных параметров поиска. В следующем примере показано, как pgrep
ищет процесс, соответствующий vmtoolsd
.

pgrep
to obtain all PIDs associated with vmtoolsd
.Аналогично, чтобы получить только процессы, связанные с определенным пользователем, укажите идентификатор пользователя с помощью параметра u
. Как показано ниже, для пользователя bkindle
и процесса vmtoolsd
возвращается только один идентификатор процесса PID.

vmtoolsd
process associated with the user bkindle
.Поиск процессов с помощью Get-Process
в PowerShell в Linux
Обычные команды Linux работают прекрасно, но вы знали, что PowerShell также способен управлять процессами в Linux? Команда Get-Process
работает аналогично команде Linux ps
и возвращает информацию о процессах. Например, возможно, вам нужно найти все запущенные процессы текущего пользователя bkindle
. Как показано ниже, найдите все идентификаторы процессов (обозначаются как ID в Get-Process
) пользователя bkindle
.

Get-Process
cmdlet.Связано: Как использовать команду PowerShell Where-Object для фильтрации всего
Изучив различные способы определения процессов, продолжайте чтение, чтобы узнать все способы завершения или прерывания процесса в Linux!
Завершение процессов с помощью команд Kill в Linux
В предыдущих разделах вы узнали, как определить идентификатор процесса (PID), к которому вы хотите отправить сигнал kill, с использованием нативных команд Linux и PowerShell. В следующих разделах будет объяснено, как использовать программы kill
и pkill
, их ассоциированные сигналы и параметры командной строки.
Сигналы Linux и управление процессами
Сигналы – это метод, которым Linux общается с процессами, работающими в операционной системе. Три основных сигнала, которые использует команда kill
для завершения процессов, следующие:
- 1 (SIGHUP) – Завершает интерактивные программы и заставляет демоны (фоновые службы) перечитывать файлы конфигурации, используемые процессом.
- 9 (SIGKILL) – Принудительно завершает процесс без выполнения задач по грациозному завершению.
- 15 (SIGTERM) – Позволяет процессу завершиться грациозно, например, закрывая открытые файлы по окончании. Этот сигнал используется по умолчанию, когда при использовании команды kill не указывается номер.
Хотя в этой статье рассматриваются только три основных сигнала, используемых для завершения процессов, всего доступно 64 сигнала. Используйте команду
kill -l
, чтобы получить список сигналов и соответствующих им номеров.
Теперь, когда вы понимаете три основных сигнала, используемых для завершения процесса, узнайте, как завершить процесс в следующих разделах.
Использование команды kill
для завершения процесса
В следующем примере вы будете использовать команду kill
. Представьте на мгновение, что вы запускаете экземпляр PowerShell с именем pwsh
и присвоенным PID 22687. Один из способов завершения этого процесса показан ниже.
- Используйте
pgrep pwsh
, чтобы определить PID процессаpwsh
, используемый в командеkill
. - Используйте команду
kill -s TERM 22687
, чтобы завершить процессpwsh
грациозно. КомандаTERM
соответствует сигналу 15 (SIGTERM) и указывается с помощью параметраs
командыkill
. - Используйте команду
top
,ps
илиpgrep
по вашему выбору, чтобы убедиться, что PID больше не отображается.
Ниже приведен пример вышеуказанного процесса из терминала bash Ubuntu 20.04 LTS.

kill
and associated commands to terminate the pwsh
process.Команда
killall
завершит все процессы по имени, а не по PID, что может привести к непредсказуемым последствиям, если использовать эту команду небрежно. Однако, если вы все же решите использовать эту команду, используйте опциюi
, чтобы команда запрашивала подтверждение.
Завершение процессов по имени с помощью команды pkill
Возможно, вы заметили, что команда kill
работает только с идентификаторами процессов. Это может сделать завершение процесса сложным многоэтапным процессом. Команда pkill
, включенная в пакеты procps и procps-ng, завершает процесс на основе его имени.
Функционально команда pkill
выступает оберткой для программы pgrep
. Команда pkill
отправляет заданный сигнал каждому найденному процессу вместо простого перечисления PID в терминале. Отличие pkill
от kill
заключается в том, что pkill
может использовать только имя процесса, а не его PID.
Команда
pkill
по умолчанию не доступна в Ubuntu 20.04 LTS. Вам необходимо скачать и установить данное приложение. Для этого выполните командуsudo apt install mcollective-plugins-process -y
.
Для завершения процесса с помощью команды pkill
выполните следующие действия:
- Используйте команду
ps
, чтобы убедиться, что приложение nano (текстовый редактор командной строки) в данный момент выполняется. Этот шаг является необязательным, но предосторожностью перед завершением процесса. - Используйте команду
pkill -9 nano
для принудительного завершения приложения nano.
Ниже приведен пример вышеуказанного процесса из терминала bash Ubuntu 20.04 LTS.

pkill
command to forcefully terminate the nano process.Завершение процесса с помощью команды top
При выполнении команды top
для просмотра текущих процессов вы можете завершить определенный процесс, нажав клавишу k. Появится интерактивное сообщение, запрашивающее PID процесса для завершения.
Как показано ниже, выполните команду top
и нажмите клавишу k. Введите PID, который вы хотите завершить, и нажмите клавишу Enter, чтобы немедленно завершить процесс.

top
to specify a process to terminate using the k keystroke.Затем изучите еще одну альтернативу использования нативных команд Linux с помощью команды PowerShell Stop-Process
!
Использование команды PowerShell Stop-Process
для завершения процесса
Если нативные команды Linux не по вашему вкусу, существует решение в PowerShell! Как и с помощью команды kill
, вы можете завершить процессы с помощью Stop-Process
в Linux. Еще раз, представьте, что вы запускаете процесс PowerShell pwsh
.
- Найдите идентификатор PID с помощью команды
Get-Process -ProcessName 'pwsh'
и запишите идентификаторы PID для завершения. - Используйте
Stop-Process -Id 29992,30014
, чтобы завершить несколько возвращенных процессов. - Используйте
Get-Process -ProcessName 'pwsh'
и проверьте идентификаторы PID,29992
и30014
больше не отображаются, что означает, что они были завершены.
Вы также можете использовать
Get-Process
и методkill
для завершения одного или нескольких процессов:(Get-Process -Id [PID]).Kill()
или(Get-Process -Id [PID1,2,3,4]).Kill()
.Будьте осторожны при использовании параметра
ProcessName
. Использование этого параметра аналогично командеkillall
и приведет к завершению всех процессов, соответствующих указанным именам.
Ниже приведен пример вышеуказанного процесса из терминала bash Ubuntu 20.04 LTS.

Stop-Process
to kill processes in Linux.Следующие шаги
Теперь вы должны знать множество способов нахождения и завершения процессов в Linux! Для вашего следующего вызова попробуйте убить процессы удаленно, используя соединения SSH, или уничтожить процессы, которые могут выполняться в контейнерах.
Связано: Парень из мира Windows в мире Linux: Настройка SSH в Linux