Команда 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
Запустите его на системе, которой вы управляете, и посмотрите, что он покажет. Во многих случаях история процессов оказывается не такой, как можно было бы ожидать, особенно на серверах с длительным сроком эксплуатации, где в результате развертываний и перезапусков остаются скрытые слои процессов.
Комментарии (2)