← Назад к вопросам
Как посмотреть список всех процессов в Linux?
1.3 Junior🔥 131 комментариев
#DevOps и инфраструктура
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Просмотр процессов в Linux
Для управления процессами в Linux существует несколько команд. Выбор зависит от того, какую информацию тебе нужна.
1. ps — основная команда
# Все процессы текущего пользователя
ps
# Все процессы в системе
ps aux
# В деталях:
# USER — владелец процесса
# PID — ID процесса
# %CPU — использование CPU
# %MEM — использование памяти
# VSZ — виртуальная память (kB)
# RSS — реальная память (kB)
# TTY — терминал (если есть)
# STAT — статус (R=running, S=sleep, Z=zombie)
# START — время запуска
# TIME — CPU время
# COMMAND — команда
# Только Python процессы
ps aux | grep python
# Только собственные процессы
ps -u $USER
# С деревом иерархии (parent->child)
ps aux --forest
# С полной информацией
ps auxww
# С кастомными колонками
ps -eo pid,user,cpu,%mem,vsz,rss,stat,start,cmd
2. top / htop — мониторинг в реальном времени
# Интерактивный мониторинг (TOP 10 CPU)
top
# Лучше: htop (если установлен)
htop
# Только Python процессы
top -p $(pgrep -f python | tr '\n' ',')
# Batch mode (вывести один раз и выйти)
top -bn1 -o %CPU | head -20
3. pgrep — поиск процессов
# Найти PID всех Python процессов
pgrep python
# Полное имя команды
pgrep -f "python app.py"
# Только первый найденный
pgrep -f python | head -1
# Количество процессов
pgrep python | wc -l
# Основной процесс
pgrep -P 1 # PID 1 (init)
4. jobs — процессы в текущей сессии
# Процессы в текущей shell сессии
jobs
# С PID
jobs -l
# Статусы: Running, Stopped, Done
5. systemctl — управление сервисами
# Список всех сервисов
systemctl list-units --type=service
# Только активные
systemctl list-units --type=service --state=running
# Статус конкретного
systemctl status nginx
# Запустить/остановить
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
# Включить на автозапуск
systemctl enable nginx
6. /proc — информация о процессах
# Все процессы в виде директорий
ls /proc
# Информация о конкретном процессе
ls /proc/1234/ # где 1234 — PID
# Команда процесса
cat /proc/1234/cmdline
# Статус
cat /proc/1234/status
# Открытые файлы
ls /proc/1234/fd/
# Карта памяти
cat /proc/1234/maps
# Статистика потребления ресурсов
cat /proc/1234/stat
7. Практические примеры
Найти процесс с наивысшей загрузкой CPU
# Вариант 1: top
top -bn1 -o %CPU | grep -v PID | head -5
# Вариант 2: ps
ps aux --sort=-%cpu | head -10
# Вариант 3: ps с форматированием
ps -eo pid,user,%cpu,%mem,vsz,rss,cmd --sort=-%cpu | head -10
Найти процесс с наивысшим использованием памяти
ps aux --sort=-%mem | head -10
# Вывести имя и память в MB
ps -eo pid,user,rss,cmd --sort=-%mem | awk '{print $1, $2, $3/1024, $4}' | head -10
Отследить процесс и его потомков
# Дерево процессов
pstree -p 1234
# Процессы с тем же parent процессом
ps --ppid 1234
# Все потомки
pgrep -P 1234
Найти и убить процесс
# Найти
pgrep -f "python app.py"
# Убить сигналом TERM (мягко, дает процессу время на очистку)
kill -TERM 1234
# Убить сигналом KILL (жёстко, сразу)
kill -KILL 1234
# или
kill -9 1234
# Убить по имени (все процессы, соответствующие)
killall python
killall -9 python # Жёстко
# Убить с фильтром
pkill -f "python app.py"
pkill -f "python app.py" -TERM # Мягко
Мониторинг памяти
# Вся информация о памяти
free -h
# По процессам
ps aux --sort=-%mem | head -20
# С процентами
ps -eo pid,user,%mem,cmd --sort=-%mem | head -20
Процессы, слушающие порты
# Какой процесс слушает порт 8000
lsof -i :8000
# Все процессы на портах
netstat -tulpn
# Или newer версия
ss -tulpn
# Убить процесс на порту 8000
kill $(lsof -t -i:8000)
8. Python скрипт для управления процессами
import subprocess
import psutil
import signal
from typing import List, Dict
class ProcessManager:
@staticmethod
def get_all_processes() -> List[Dict]:
"""Получить все процессы"""
processes = []
for proc in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_percent']):
try:
pinfo = proc.as_dict(attrs=['pid', 'name', 'username', 'cpu_percent', 'memory_percent'])
processes.append(pinfo)
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
return processes
@staticmethod
def get_process_by_name(name: str) -> List[int]:
"""Найти PID процессов по имени"""
pids = []
for proc in psutil.process_iter(['pid', 'name']):
try:
if name.lower() in proc.info['name'].lower():
pids.append(proc.info['pid'])
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
return pids
@staticmethod
def get_process_info(pid: int) -> Dict:
"""Информация о конкретном процессе"""
proc = psutil.Process(pid)
return {
'pid': proc.pid,
'name': proc.name(),
'status': proc.status(),
'cpu_percent': proc.cpu_percent(interval=1),
'memory_info': proc.memory_info(),
'memory_percent': proc.memory_percent(),
'create_time': proc.create_time(),
'cmdline': ' '.join(proc.cmdline()),
'num_threads': proc.num_threads(),
'connections': len(proc.connections()),
}
@staticmethod
def get_top_processes(sort_by='cpu', limit=10) -> List[Dict]:
"""TOP процессы по CPU или памяти"""
processes = ProcessManager.get_all_processes()
if sort_by == 'cpu':
sorted_procs = sorted(processes, key=lambda x: x['cpu_percent'], reverse=True)
elif sort_by == 'memory':
sorted_procs = sorted(processes, key=lambda x: x['memory_percent'], reverse=True)
else:
raise ValueError('sort_by should be cpu or memory')
return sorted_procs[:limit]
@staticmethod
def kill_process(pid: int, signal_type=signal.SIGTERM, timeout=3) -> bool:
"""Убить процесс"""
try:
proc = psutil.Process(pid)
proc.send_signal(signal_type)
# Ждём завершения
try:
proc.wait(timeout=timeout)
return True
except psutil.TimeoutExpired:
# Если не умер за timeout, убить жёстко
proc.kill()
proc.wait()
return False
except psutil.NoSuchProcess:
return False
@staticmethod
def monitor_process(pid: int, interval=1, duration=10) -> None:
"""Мониторить процесс в течение времени"""
proc = psutil.Process(pid)
elapsed = 0
print(f'Monitoring process {pid} ({proc.name()}):')
print(f'{'Time':<6} {'CPU%':<8} {'MEM%':<8} {'RSS MB':<10} {'Threads':<8}')
print('-' * 50)
while elapsed < duration:
try:
cpu_percent = proc.cpu_percent(interval=interval)
mem_info = proc.memory_info()
mem_percent = proc.memory_percent()
num_threads = proc.num_threads()
print(f'{elapsed:<6} {cpu_percent:<8.1f} {mem_percent:<8.1f} {mem_info.rss/1024/1024:<10.1f} {num_threads:<8}')
elapsed += interval
except (psutil.NoSuchProcess, psutil.AccessDenied):
print(f'Process {pid} terminated')
break
# Использование
if __name__ == '__main__':
manager = ProcessManager()
# Все процессы
print('All processes:', len(manager.get_all_processes()))
# TOP 5 по CPU
print('\nTOP 5 by CPU:')
for proc in manager.get_top_processes(sort_by='cpu', limit=5):
print(f"{proc['name']:<20} CPU: {proc['cpu_percent']:>6.1f}% MEM: {proc['memory_percent']:>6.1f}%")
# Найти Python процессы
pids = manager.get_process_by_name('python')
print(f'\nPython processes: {pids}')
# Информация о процессе
if pids:
info = manager.get_process_info(pids[0])
print(f'\nProcess info: {info}')
# Убить процесс
# manager.kill_process(pids[0], signal.SIGTERM)
9. Сигналы
# SIGTERM (15) — мягкое завершение, процесс может очиститься
kill -TERM 1234
# SIGKILL (9) — жёсткое завершение, немедленно
kill -KILL 1234
# SIGSTOP (19) — остановить процесс
kill -STOP 1234
# SIGCONT (18) — продолжить процесс
kill -CONT 1234
# SIGHUP (1) — перезагрузить конфиг
kill -HUP 1234
# SIGUSR1/2 — пользовательские сигналы
kill -USR1 1234
10. Лучшие практики
# ✅ Используй ps aux для быстрого просмотра
ps aux | grep python
# ✅ Используй pgrep для поиска
pgrep -f "app.py"
# ✅ Используй htop для интерактивного мониторинга
htop
# ✅ Используй lsof для выявления открытых файлов
lsof -p 1234
# ❌ Не используй killall без проверки (может убить системные процессы)
# ✅ Вместо этого: kill конкретный PID
# ❌ Не используй SIGKILL (-9) без необходимости
# ✅ Сначала SIGTERM, если не сработает — SIGKILL
Шпаргалка
# Быстрые команды
ps aux # Все процессы
ps aux --sort=-%cpu | head # TOP по CPU
ps aux --sort=-%mem | head # TOP по памяти
pgrep -f "app.py" # Найти процесс
kill 1234 # Убить процесс
kill -9 1234 # Убить жёстко
lsof -i :8000 # Процесс на порту
top # Мониторинг реалтайм
htop # Красивый top
Управление процессами — критичный навык для DevOps и системного администратора!