Как проверить статус процесса postgresql в Linux с помощью команды ps и убить зависший процесс через kill -9?

PostgreSQL в Linux запускает несколько системных процессов, и иногда возникает необходимость проверить их состояние или принудительно завершить зависший процесс. Рассмотрим пошаговый подход с использованием стандартных инструментов командной строки.

## Проверка статуса процессов PostgreSQL через команду ps

Команда `ps` (process status) позволяет просматривать список активных процессов в системе. Для поиска процессов PostgreSQL используются следующие варианты:

**Базовый поиск:**

ps aux | grep postgres

Эта команда выводит все процессы, в названии которых присутствует слово `postgres`. Флаг `a` показывает процессы всех пользователей, `u` — в расширенном формате с именем владельца, `x` — включая процессы без терминала.

**Вывод содержит следующие столбцы:**
— `USER` — пользователь-владелец процесса
— `PID` — идентификатор процесса (нужен для kill)
— `%CPU` и `%MEM` — потребление ресурсов
— `STAT` — статус процесса (S — спящий, R — активный, Z — зомби)
— `COMMAND` — команда запуска

**Более точный поиск без вывода самой команды grep:**

ps aux | grep ‘[p]ostgres’

**Поиск только по имени процесса:**

pgrep -l postgres

Эта команда выводит PID и имя всех процессов PostgreSQL.

**Просмотр дерева процессов:**

ps auxf | grep postgres

Флаг `f` отображает иерархию процессов, что полезно для понимания структуры: главный процесс `postgres` (postmaster) и дочерние процессы-воркеры.

## Определение зависшего процесса

Зависший процесс обычно имеет статус `D` (ожидание I/O, не прерываемое) или потребляет аномально высокий процент CPU/памяти. Также можно проверить долгоживущие запросы через:

ps aux —sort=-%cpu | grep postgres

## Завершение зависшего процесса через kill -9

После того как вы определили PID зависшего процесса, используйте:

**Мягкое завершение (рекомендуется сначала):**

kill -15

Сигнал SIGTERM даёт процессу возможность корректно завершиться.

**Принудительное завершение:**

kill -9

Сигнал SIGKILL немедленно уничтожает процесс без возможности обработки. Используйте только если `-15` не помогло.

**Завершение всех процессов postgres сразу:**

pkill -9 postgres

**Важно:** убивать главный процесс postmaster через `kill -9` нежелательно — это может привести к повреждению данных. Предпочтительнее использовать:

pg_ctl stop -m fast

или

systemctl stop postgresql

## Проверка после завершения

Убедитесь, что процесс завершён:

ps aux | grep postgres

Если процесс исчез из списка — операция выполнена успешно.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.