Как проверить статус процесса 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
Если процесс исчез из списка — операция выполнена успешно.
