← Назад к вопросам

Как посмотреть список всех процессов в 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 и системного администратора!

Как посмотреть список всех процессов в Linux? | PrepBro