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

Как найти информацию о процессе в Linux

1.0 Junior🔥 251 комментариев
#Linux и администрирование

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Поиск информации о процессах в Linux: от базовых команд до глубокой аналитики

В Linux всё является файлом, включая процессы. Для получения информации о них существует богатый набор инструментов — от классических консольных утилит до прямого взаимодействия с виртуальной файловой системой /proc. Рассмотрю основные подходы, от наиболее простых к продвинутым.

1. Классические команды для быстрого анализа

Самый быстрый способ — использовать стандартные утилиты, которые по сути являются удобными парсерами для /proc.

  • ps (Process Status) — основа основ. Без опций показывает процессы текущего пользователя и терминала. Мощь команды раскрывается с ключами:

    # Показать все процессы в полноформатном выводе
    ps aux
    # Или в формате BSD: ps -ef
    
    # Показать процессы в виде дерева (иерархия родителей и потомков)
    ps auxf
    # Или ps -e --forest
    
    # Детальная информация по конкретному PID (например, 1234)
    ps -fp 1234
    
    # Поиск процесса по имени (часто используется с grep)
    ps aux | grep nginx
    
  • top / htop — динамическое наблюдение. Если ps — это "фотография", то top — "видеопоток" в реальном времени. htop — его улучшенная, интерактивная версия (часто требует установки).

    top
    # Внутри top: нажать 'c' для отображения полного пути команды, 'M' для сортировки по памяти, 'P' — по CPU.
    
    htop
    # Более удобная навигация, цветовой вывод, возможность "убивать" процессы (F9).
    
  • pstree — визуализация дерева процессов в компактном виде, идеально для понимания родительско-дочерних связей.

    pstree -p -u  # Показать дерево с PID и именами пользователей
    

2. Работа с файловой системой /proc — источник истины

Это виртуальная файловая система, создаваемая ядром на лету. Каждому процессу с PID N соответствует директория /proc/N/. Здесь хранится вся информация.

  • Ключевые файлы внутри /proc/<PID>/:
    *   **`/proc/<PID>/status`** — удобочитаемый свод: имя, состояние, PID, PPID, использование памяти, UID/GID.
    *   **`/proc/<PID>/cmdline`** — полная командная строка запуска процесса с нулевыми символами вместо пробелов. Для чтения: `cat /proc/1234/cmdline | tr '\0' ' '`.
    *   **`/proc/<PID>/exe`** — симлинк на исполняемый файл процесса. `ls -la /proc/1234/exe` покажет путь к бинарнику.
    *   **`/proc/<PID>/cwd`** — симлинк на текущую рабочую директорию процесса.
    *   **`/proc/<PID>/environ`** — переменные окружения процесса. Читается аналогично cmdline.
    *   **`/proc/<PID>/fd/`** — директория с файловыми дескрипторами. Показывает, какие файлы/сокеты открыты.
    *   **`/proc/<PID>/io`**, **`/proc/<PID>/statm`** — статистика по вводу-выводу и использованию памяти.

    **Пример глубокой диагностики:**
```bash
# Найдем PID процесса и изучим его
PID=$(pgrep -f "my_app")
echo "Статус:" && cat /proc/$PID/status | head -20
echo "Команда:" && cat /proc/$PID/cmdline | tr '\0' ' ' && echo
echo "Открытые файлы:" && ls -la /proc/$PID/fd/
```

3. Утилиты для специализированных задач

  • pgrep / pkill — поиск и отправка сигналов процессам по критериям (имя, пользователь и т.д.), без связки с grep.

    pgrep -u www-data  # Найти все PID процессов пользователя www-data
    pkill -f "python script.py"  # Завершить процесс по полному совпадению строки
    
  • lsof (List Open Files) — мощнейший инструмент для анализа открытых файлов, сетевых соединений и процессов, которые их используют.

    lsof -p 1234  # Все открытые файлы/сокеты процесса 1234
    lsof -i :80   # Кто слушает 80-й порт?
    lsof /var/log/syslog  # Какой процесс держит файл syslog открытым?
    
  • ss / netstat — для сетевой диагностики, связанной с процессами.

    ss -tlnp | grep :443  # Показать процесс, слушающий 443 порт (TCP)
    netstat -tulpn        # Классический вариант (часто устаревший)
    
  • systemctl — для процессов, управляемых через systemd (а таких в современных дистрибутивах большинство).

    systemctl status nginx  # Полная информация: статус, PID, логи, зависимости
    systemctl show --property=MainPID nginx  # Получить только PID юнита
    

4. Поиск по содержимому и мониторинг

Иногда нужно найти процесс не по имени, а по используемому ресурсу (порт, файл) или отслеживать его поведение во времени.

  • fuser — показывает PID процессов, использующих указанный файл или сокет.

    fuser -v 80/tcp  # Кто использует 80 порт по TCP?
    fuser -k /mnt/disk  # "Убить" все процессы, использующие файловую систему (опция -k)
    
  • strace / ltrace — трассировка системных и библиотечных вызовов процесса в реальном времени. Незаменимы для отладки.

    strace -p 1234  # Начать отслеживать все системные вызовы процесса 1234
    strace -e open,connect dd if=/dev/zero of=test.img bs=1M count=10  # Отследить только открытие файлов и сетевых подключений
    

Рекомендуемый рабочий процесс (Workflow)

  1. Быстрый поиск: ps aux | grep <имя> или pgrep -f <имя> для получения PID.
  2. Общая картина: htop для оценки нагрузки или pstree для понимания иерархии.
  3. Глубокая инспекция: Переход в /proc/<PID>/ и анализ status, cmdline, fd.
  4. Анализ сетевой активности: ss -tlnp или lsof -i.
  5. Динамическая отладка: strace -p <PID> для анализа поведения "на лету".

Таким образом, арсенал Linux для интроспекции процессов чрезвычайно богат. Понимание, когда и какой инструмент применить — ключевой навык инженера для эффективной диагностики, мониторинга и отладки сложных систем.

Как найти информацию о процессе в Linux | PrepBro