witr - инструмент Linux, который объясняет, почему запущен тот или иной процесс

Команда ps aux показывает, какие процессы запущены в вашей системе, а команда witr идет еще дальше и объясняет, почему они запущены, отслеживая их происхождение.Если вам когда-нибудь доводилось поздно ночью просматривать ps aux, пытаясь понять, почему процесс Node.js использует слишком много памяти, вы, вероятно, видели PID, пользователя и команду, но это всё равно не даёт ответа на настоящие вопросы: кто его запустил, что его запустило и почему он до сих пор работает?

Чтобы выяснить это вручную, обычно приходится запускать несколько команд, таких как systemctl status, lsof, ss -tlnp, и копаться в /proc//, только чтобы сложить все воедино.

witr упрощает эту задачу, поскольку принимает имя процесса, PID или номер порта и показывает полную картину в одном месте. Он отслеживает процесс от systemd вплоть до запущенного процесса, так что вы можете быстро понять, почему он существует.

Установка witr в Linux

Самый быстрый способ установить witr в Linux — использовать официальный скрипт установки. Просто выполните следующую команду, чтобы установить бинарный файл в /usr/local/bin и сделать его доступным для всей системы:

curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | sudo bash

Этот скрипт автоматически определяет ваш дистрибутив Linux и архитектуру процессора, а затем загружает и устанавливает подходящую версию witr. Он также устанавливает справочную страницу man, чтобы вы могли получить доступ к документации с помощью команды:

man witr

После установки проверьте, работает ли программа:

witr --version

Вывод:

witr v0.3.2 (commit 5feece67c5e1ec6680ae0056daba07aa65158cb3, built 2026-05-16T17:41:51Z)

Отслеживание процесса по имени в Linux

Наиболее распространённый способ использования witr — передача имени процесса, что позволит найти соответствующий процесс и отобразить его полную историю в одном окне.

witr node

или

witr --exact node

Этот вывод заменяет несколько ручных проверок, которые вы обычно выполняли бы. Самая важная часть — строка Why It Exists, которая показывает полную цепочку от systemd (системного процесса init) вплоть до вашего узлового процесса. Это помогает точно понять, как был запущен процесс.

Строка Source: bash (shell) указывает, что процесс был запущен вручную из терминала, а не службой или фоновым демоном. Строка Working Dir показывает, где он был запущен, а Sockets — какие сетевые порты он использует.

Раздел с предупреждениями помогает быстро обнаружить потенциальные проблемы, такие как открытый доступ к службе через общедоступный интерфейс.

Если несколько процессов имеют одинаковое имя (например, nginx часто содержит несколько рабочих процессов), witr выведет их список и предложит вам сузить поиск с помощью:

witr --pid

Вы также можете использовать --exact, чтобы найти только процесс с точным названием, а не с частичным совпадением.

Если вы до сих пор вручную сопоставляли вывод systemctl, ps и lsof, чтобы ответить на этот вопрос, отправьте эту статью тому, кто делает то же самое.

Как определить, какой процесс использует порт в Linux

Если что-то прослушивает порт, и вы хотите узнать, что это за процесс и почему он запущен, вы можете использовать опцию --port:

witr --port 3000

Результат:

Target      : node
Process     : node (pid 10688) {forked}
User        : ravi
Command     : node -e require('http').createServer((req,res)=>res.end('ok')).listen(3000)
Started     : 8 min ago (Fri 2026-05-22 10:15:50 +05:30)
Why It Exists :
  systemd (pid 1) → systemd (pid 2768) → ptyxis (pid 10614) → ptyxis-agent (pid 10634) → bash (pid 10669) → node (pid 10688)
Source      : bash (shell)
Working Dir : /home/ravi/Desktop
Sockets     : 0.0.0.0:3000 (TCP | LISTENING)
              [::]:3000 (TCP6 | LISTENING)
Warnings    :
  • Process is listening on a public interface

Он точно указывает, какая systemd служба запустила процесс, что очень полезно, когда нужно остановить службу, изменить её поведение при запуске или отладить причину постоянного перезапуска.

Вместо того чтобы вручную отслеживать с помощью ss, lsof и systemctl status, команда witr связывает все эти элементы в единую картину.

Поиск сведений о процессах Linux по PID

Иногда у вас уже есть PID, полученный с помощью таких инструментов, как top или ps aux, и вы просто хотите понять всю историю, стоящую за ним.

Вы можете передать его напрямую с помощью --pid:

witr --pid 10688

Вывод:

Target      : node
Process     : node (pid 10688) {forked}
User        : ravi
Command     : node -e require('http').createServer((req,res)=>res.end('ok')).listen(3000)
Started     : 13 min ago (Fri 2026-05-22 10:15:50 +05:30)
Why It Exists :
  systemd (pid 1) → systemd (pid 2768) → ptyxis (pid 10614) → ptyxis-agent (pid 10634) → bash (pid 10669) → node (pid 10688)
Source      : bash (shell)
Working Dir : /home/ravi/Desktop
Sockets     : 0.0.0.0:3000 (TCP | LISTENING)
              [::]:3000 (TCP6 | LISTENING)
Warnings    :
  • Process is listening on a public interface

Здесь особенно полезна строка «Source», которая указывает, что процесс был запущен из интерактивной оболочки, а не системным сервисом.

Поле Listening показывает сетевую привязку. В данном случае 0.0.0.0:3000 означает, что служба доступна через все сетевые интерфейсы, а не только через localhost. Это важно проверять в производственных средах.

Процесс, привязанный к 0.0.0.0, доступен извне машины, если это разрешают правила брандмауэра, поэтому witr выделяет это, чтобы помочь вам быстро обнаружить потенциальные риски уязвимости.

Просмотр иерархии дерева процессов Linux

Если вы предпочитаете более наглядную визуальную структуру вместо однострочной цепочки, можно использовать опцию –-tree, которая отображает полную иерархию процессов, включая родительские, дочерние и равные процессы:

witr --pid 143895 --tree

Вывод:

systemd (pid 1)
  └─ systemd (pid 2768)
    └─ ptyxis (pid 10614)
      └─ ptyxis-agent (pid 10634)
        └─ bash (pid 10669)
          └─ node (pid 10688)

Этот вид особенно полезен при отладке сервисов, запускающих несколько рабочих процессов. Вместо того чтобы мысленно восстанавливать взаимосвязи по выводу ps, вы можете мгновенно увидеть полную иерархию.

Целевой процесс чётко выделен в дереве, поэтому он не теряется среди процессов одного уровня или дочерних процессов.

Если вы отлаживаете работающий сервер и это помогло вам выяснить, что именно потребляет ресурсы, поделитесь этим с вашей командой — они будут вам благодарны, когда в следующий раз возникнет какая-то загадочная проблема.

Мониторинг нескольких процессов Linux одновременно

Вы также можете объединить несколько входных данных в одной команде, указав имена процессов, порты и PID, после чего система выполнит все поиски и сгруппирует результаты за вас:

witr nginx --port 5432 --pid 1234

Вывод:

----- [name: nginx] -----
Target      : nginx
Process     : nginx (pid 2311)
...
----- [port: 5432] -----
Target      : postgres
Process     : postgres (pid 891)
...
----- [pid: 1234] -----
Target      : node
Process     : node (pid 1234)
...

Это особенно полезно при аудите серверов или отладке инцидентов, когда необходимо одновременно проверить несколько сервисов. Вместо запуска отдельных команд для каждого процесса вы получаете сводный обзор в одном месте.

Кроме того, это упрощает сравнение несвязанных между собой процессов, таких как веб-сервер, база данных и процесс приложения, без переключения контекста.

Если запустить witr без аргументов (или с -i), откроется интерактивный TUI (терминальный пользовательский интерфейс), отображающий все запущенные процессы в режиме реального времени.

witr

Внутри TUI вы можете просматривать процессы, сортировать их по загрузке ЦП или памяти, переключаться между видами представления, такими как список процессов или просмотр портов, а также открывать подробную информацию о любом процессе. Вы также можете выполнять такие действия, как отправка сигналов (например, kill или pause), прямо из интерфейса.

Заключение

witr заполняет реальный пробел в повседневной диагностике Linux; такие инструменты, как ps, top, lsof и ss, показывают, что запущено, но не объясняют, почему это запущено и как это туда попало.

witr автоматически восстанавливает этот недостающий контекст. Он прослеживает полную цепочку причинно-следственных связей от systemd или интерактивной оболочки вплоть до конечного процесса, определяет исходный супервизор и выделяет полезный контекст, такой как рабочий каталог, репозиторий git и сетевые привязки. Он также сигнализирует о рискованных ситуациях, таких как службы, доступные через публичные интерфейсы.

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

Хороший способ попробовать его — начать с чего-то знакомого. Например:

witr --port 80

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

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Похожие статьи

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

Автар по умолчанию