Witr – ein Tool, das erklärt, warum Prozesse auf Linux-Systemen laufen
(github.com/pranshuparmar)- Witr (why-is-this-running) ist ein Tool, das auf Linux-Systemen klar zeigt, warum ein bestimmter Prozess, Dienst oder Port aktiv ist
- Im Gegensatz zu bestehenden Tools wie
ps,topoderlsof, die nur zeigen, „was läuft“, stellt es die Kausalzusammenhänge hinter dem „warum es läuft“ auf einem Bildschirm dar - Durch PID-basierte Analyse verfolgt es Ursprung, Startpfad, Fortbestand und Kontext eines Prozesses
- Es erklärt die Ausführungsursache in Verbindung mit verschiedenen Quellen wie systemd, docker, pm2, cron, shell und arbeitet read-only und nicht destruktiv
- Ein Tool, das beim Debugging und bei der Störungsbehebung die Zeit bis zum Verständnis verkürzt und die Laufzeitstruktur komplexer Systeme auf einen Blick erfassbar macht
Zweck und Konzept
- Die Kernfrage von Witr lautet: „Warum läuft das hier? (why-is-this-running)“
- Es verfolgt Ursprung und Ursache aller laufenden Elemente wie Prozesse, Dienste und Ports
- Es zeigt indirekte Ausführungsursachen über mehrere Ebenen hinweg (Supervisor, Container, Service, Shell usw.) explizit an
- Während bestehende Tools nur Status und Metadaten liefern, stellt Witr Kausalbeziehungen klar dar
- Dadurch wird in einer für Menschen gut lesbaren Form ausgegeben, was läuft, wie es gestartet wurde, warum es läuft und in welchem Kontext
Hauptziele
- Den Grund für die Existenz eines Prozesses erklären und mehr Informationen liefern als nur die reine Laufzeit
- Debugging- und Incident-Response-Zeit verkürzen
- Sofort ohne Konfiguration nutzbar, read-only und sicher
- Klarheit vor Vollständigkeit
- Keine Monitoring-, Performance-Analyse- oder Auto-Recovery-Funktionen enthalten
Funktionsweise
- Alle Ziele werden prozesszentriert über die PID interpretiert
- Ports, Dienste, Container und Befehle werden alle mit einer PID verknüpft
- Auf Basis der PID wird eine causal chain der Ausführung aufgebaut
- Vier Kernfragen
- Was läuft?
- Wie wurde es gestartet?
- Was hält es am Laufen?
- Zu welchem Kontext gehört es?
Unterstützte Ziele
- Unterstützt Prozess-/Dienstnamen, PID und Portnummern als Eingaben
- Wenn bei einer Namenseingabe mehrere Prozesse passen, wird zur Auswahl einer PID aufgefordert
- Mit den Optionen
--pidund--portist eine Analyse eines bestimmten Prozesses oder Ports möglich
Ausgabestruktur
- Target: das vom Benutzer angegebene Ziel
- Process: ausführbare Datei, PID, Benutzer, Befehl, Startzeit, Anzahl der Neustarts
- Why It Exists: die Ancestry Chain des Prozesses
- Source: das zentrale System, das die Ausführung verantwortet (z. B. systemd, docker, pm2, cron oder shell)
- Context: Arbeitsverzeichnis, Git-Repository, Docker-Container, Bind-Informationen usw.
- Warnings: nicht blockierende Warnungen wie Ausführung mit Root-Rechten, Lauschen auf öffentlichen Interfaces, lange Laufzeit oder übermäßiger Speicherverbrauch
Kommandozeilenoptionen
--pid,--port: Analyse einer bestimmten PID oder eines bestimmten Ports--short: einzeilige Zusammenfassung--tree: vollständigen Prozessbaum anzeigen--json: Ausgabe im JSON-Format--warnings: nur Warnungen anzeigen--no-color: Farben deaktivieren--env: nur Umgebungsvariablen anzeigen--help: Hilfe anzeigen
Installation und Entfernung
- Wird als einzelne statische Linux-Binärdatei verteilt
- Installation per Skript (empfohlen)
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash- Erkennt die CPU-Architektur automatisch und installiert nach
/usr/local/bin/witr
- Manuelle Installation
- Binärdateien für
amd64undarm64direkt herunterladen und Prüfsumme verifizieren - Ausführungsrechte setzen und in den PATH verschieben
- Binärdateien für
- Verifikation und Entfernung
- Mit
witr --versionundman witrprüfen - Kann mit
sudo rm -f /usr/local/bin/witrentfernt werden
- Mit
- Nix-Flake-Unterstützung: Ausführung möglich mit
nix run github:pranshuparmar/witr -- --port 5000
Plattform und Berechtigungen
- Nur für Linux
- Informationen werden über Zugriff auf
/procgesammelt- Für einige Prozessinformationen sind sudo-Rechte erforderlich
1 Kommentare
Hacker-News-Kommentare
Es wurde angemerkt, dass die GIF-Schleife im README zu schnell neu startet, sodass sich die Ausgabe nur schwer vollständig lesen lässt.
Ein paar Sekunden mehr Pause wären gut.
Schon der letzte Frame vermittelt alle nötigen Informationen.
Ich habe es bereits durch ein statisches Bild ersetzt, und danke euch für all die Vorschläge.
Es zeigt zwar, dass der Befehl schnell ist, aber alles steht bereits im letzten Frame, und die Bandbreiteneffizienz ist auch schlechter.
Man kann die Ausgabe einfach bei 100 % stehen lassen. Wie man in ein Terminal tippt, wissen ohnehin alle.
Das Tool soll keine bestehenden Monitoring-/Observability-Tools ersetzen.
Es ist dafür gedacht, nach einem SSH-Login schnell zu verstehen: „Warum läuft das hier eigentlich?“
Je nach Feedback bin ich bereit, die Ausrichtung anzupassen.
Es war schon immer schwierig herauszufinden, welchem Zweck ein Prozess dient, wenn er plötzlich viele Ressourcen verbraucht.
Anfangs dachte ich, es würde sogar die Funktion des Prozesses erklären, aber das ist nicht der Fall.
Trotzdem ein tolles Tool. Später könnte man es vielleicht erweiterbar machen, indem man Manpages + eine Prozessdatenbank kombiniert.
Wirkt nützlich, aber die aktuelle Ausgabe zeigt meist nur die ppid, sodass man zwar sieht, „wer“ es gestartet hat, aber schwerer erkennt, „warum“ es läuft.
Die Unterstützung mehrerer Ausgabeformate ist gut. Mit Blick auf Automatisierung wäre es noch besser, JSON oder ein grep-freundliches Format als Standard zu haben.
Die Standardausgabe ist für Menschen lesbar gestaltet, aber per JSON-Flag wird Automatisierung bereits unterstützt.
Ich werde auch über ein Format nachdenken, das sich leichter mit grep verarbeiten lässt.
Interessantes Tool, aber die Installation des Binärprogramms per
curlist mir unangenehm.Später können dann Fragen auftauchen wie: „Wie wurde das eigentlich installiert?“ oder „Sind die Sicherheitspatches aktuell?“
deb-Pakete oder snap wären schön.
curl-Installation nicht für alle passt.Es ist die erste Veröffentlichung, deshalb wollte ich einfach starten, aber wenn das Projekt Anklang findet, plane ich eine offizielle Paketverteilung.
wdtci: „what does this curl install?“systemctl status $pidbekommt man ebenfalls viele Informationen.Der Satz „witr basiert auf Vertrauen“ und die Erklärung, es sei mit Hilfe von AI/LLM entwickelt worden, wirken widersprüchlich.
Wenn die Ergebnisse des LLM geprüft und der Code ordentlich reviewt wurden, wirkt es trotzdem vertrauenswürdig.
Positiv sehe ich, dass die Nutzung von LLMs transparent offengelegt wurde.
Die eigentlichen Entscheidungen wurden von Menschen getroffen.
Wenn er ergebnisorientiert entwickelt wurde, finde ich das in Ordnung.
Wirklich ein großartiges und nützliches Tool.
Aber in Produktionsumgebungen ist es aus den oben genannten Gründen schwer, es sofort einzusetzen.
Debian- oder RPM-Pakete wären wünschenswert.
Wer direkt aus dem Quellcode bauen möchte, kann folgenden Befehl verwenden:
Persönlich würde ich bei vorhandenem
install.sheher erwarten, dass lokaler Quellcode bevorzugt installiert wird.Solche einfachen Tools sind genau der Grund, warum ich dem Terminal treu bleibe.
Ich frage mich, was „Git repository name and branch“ genau bedeutet.
Erkennt das Tool, ob ein laufender Prozess innerhalb eines Git-Repositories gestartet wurde?
Link zum relevanten Code
Coole Idee. Mein früheres „whodis“-Alias diente dazu, die PID zu finden, die einen Port geöffnet hat, aber das hier ist deutlich mächtiger.
Wirklich ein erstaunliches Tool. Danke fürs Teilen.
Wäre es in Ordnung, wenn ich ein AUR-Paket dafür erstelle?
Einer der Vorteile von Arch ist, dass solche interessanten Tools extrem schnell im AUR landen.