Witr - un outil qui explique pourquoi un processus s’exécute sur un système Linux
(github.com/pranshuparmar)- Witr (why-is-this-running) est un outil qui montre clairement pourquoi un processus, un service ou un port donné est en cours d’exécution sur un système Linux
- Contrairement à
ps,top,lsofet autres, qui montrent simplement « ce qui s’exécute », il affiche sur un seul écran la relation de causalité derrière le “pourquoi c’est en cours d’exécution” - Grâce à une analyse basée sur le PID, il suit l’origine du processus, son chemin d’exécution, la raison pour laquelle il est maintenu en vie et son contexte d’appartenance
- Il explique la cause de l’exécution en s’intégrant à diverses sources comme systemd, docker, pm2, cron, shell, tout en fonctionnant en lecture seule et de manière non destructive
- C’est un outil qui réduit le temps nécessaire à la compréhension lors du débogage et de la gestion d’incidents, et permet de saisir d’un coup d’œil la structure d’exécution de systèmes complexes
Objectif et concept
- La question centrale de Witr est : « Pourquoi cela est-il en cours d’exécution ? (why-is-this-running) »
- Il remonte l’origine et la cause de tous les éléments en cours d’exécution, qu’il s’agisse de processus, services ou ports
- Il montre explicitement les causes d’exécution indirectes à travers plusieurs couches (superviseur, conteneur, service, shell, etc.)
- Alors que les outils existants ne fournissent que l’état et les métadonnées, Witr exprime clairement les relations de causalité
- Au final, il affiche sous une forme facile à lire pour un humain « ce qui s’exécute, comment, pourquoi et dans quel contexte »
Principaux objectifs
- Expliquer la raison d’être d’un processus et fournir des informations au-delà de son simple état d’exécution
- Réduire le temps de débogage et de gestion des incidents
- Utilisable immédiatement sans configuration, avec garantie de sécurité en lecture seule
- Donner la priorité à la clarté plutôt qu’à l’exhaustivité
- N’inclut pas de fonctions de supervision, d’analyse de performance ni d’auto-récupération
Principe de fonctionnement
- Tous les éléments sont interprétés avec le processus (PID) comme point central
- Ports, services, conteneurs et commandes sont tous reliés à un PID
- À partir du PID, il construit une chaîne de causalité d’exécution (causal chain)
- Quatre questions clés
- Qu’est-ce qui est en cours d’exécution ?
- Comment cela a-t-il été démarré ?
- Qu’est-ce qui le maintient en vie ?
- À quel contexte cela appartient-il ?
Éléments pris en charge
- Prend en charge comme cibles d’entrée les noms de processus/service, les PID et les numéros de port
- Si plusieurs processus correspondent à un nom saisi, il demande de choisir un PID
- Les options
--pidet--portpermettent une analyse ciblée sur un processus ou un port précis
Structure de sortie
- Target : la cible spécifiée par l’utilisateur
- Process : exécutable, PID, utilisateur, commande, heure de démarrage, nombre de redémarrages
- Why It Exists : la chaîne d’ascendance causale (ancestry chain) du processus
- Source : le système principal responsable de l’exécution (par ex. systemd, docker, pm2, cron ou shell)
- Context : répertoire de travail, dépôt Git, conteneur Docker, informations de binding, etc.
- Warnings : avertissements non bloquants comme exécution avec les droits root, écoute sur une interface publique, exécution de longue durée, usage mémoire excessif, etc.
Options de ligne de commande
--pid,--port: analyser un PID ou un port spécifique--short: résumé sur une ligne--tree: afficher l’arbre complet des processus--json: sortie au format JSON--warnings: afficher uniquement les avertissements--no-color: désactiver les couleurs--env: afficher uniquement les variables d’environnement--help: afficher l’aide
Installation et suppression
- Distribué sous la forme d’un binaire Linux statique unique
- Installation par script (recommandée)
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash- Détecte automatiquement l’architecture CPU puis installe dans
/usr/local/bin/witr
- Installation manuelle
- Téléchargement direct des binaires pour
amd64etarm64, avec vérification du checksum - Après attribution des droits d’exécution, déplacement dans le PATH
- Téléchargement direct des binaires pour
- Vérification et suppression
- Vérification avec
witr --versionetman witr - Suppression possible via
sudo rm -f /usr/local/bin/witr
- Vérification avec
- Prise en charge de Nix Flake : exécution possible avec
nix run github:pranshuparmar/witr -- --port 5000
Plateforme et permissions
- Linux uniquement
- Collecte des informations via l’accès à
/proc- La consultation de certaines informations sur les processus nécessite des droits sudo
1 commentaires
Commentaires Hacker News
Proposition : la boucle GIF du README redémarre trop vite, ce qui rend la sortie difficile à lire
Ce serait mieux qu’elle reste en pause quelques secondes de plus
La dernière image suffit à transmettre toutes les informations utiles
J’ai déjà remplacé cela par une image statique, et merci pour toutes les suggestions
Il montre que la commande est rapide, mais tout est déjà visible sur la dernière image, et c’est aussi moins efficace en termes de bande passante
Il suffit de laisser la sortie figée à 100 %. Tout le monde sait déjà à quoi ressemble quelqu’un qui tape dans un terminal
Cet outil ne cherche pas à remplacer les outils de monitoring / d’observabilité existants
Il sert plutôt à comprendre rapidement, une fois connecté en SSH, « pourquoi est-ce que ça tourne ? »
Je suis prêt à ajuster l’orientation du projet en fonction des retours
Il a toujours été difficile de comprendre à quoi sert un processus quand il commence à consommer beaucoup de ressources
Au début, je pensais que l’outil expliquait aussi la fonction du processus, mais ce n’est pas le cas
Cela reste malgré tout un super outil. Plus tard, on pourrait même l’étendre en combinant pages de man + base de données de processus
Ça a l’air utile, mais la sortie actuelle montre surtout le ppid, donc on voit « qui l’a lancé », pas vraiment « pourquoi il a été lancé »
C’est bien de prendre en charge plusieurs formats de sortie. Pour les environnements automatisés, ce serait encore mieux d’avoir par défaut un format JSON ou facile à greper
La sortie par défaut a été conçue pour être lisible par un humain, mais l’automatisation est déjà prise en charge via un flag JSON
Je vais aussi réfléchir à un format plus simple à
grepOutil intéressant, mais installer un binaire avec
curlne me rassure pasPlus tard, on risque de se demander « comment ça a été installé ? » ou « les correctifs de sécurité sont-ils à jour ? »
Ce serait bien d’avoir un paquet deb ou snap
curlne convienne pas à tout le mondeComme c’est une première version, j’ai commencé simplement, mais si l’outil gagne en popularité je prévois une distribution officielle de paquets
wdtci: « what does this curl install? »systemctl status $pidLa phrase « witr repose sur la confiance » et l’explication disant que le projet a été développé avec l’aide de l’IA / des LLM donnent une impression de contradiction
Si les résultats du LLM sont relus et que la revue de code est faite correctement, cela peut inspirer confiance
Cela dit, j’apprécie la transparence sur l’usage des LLM
Les vraies décisions ont été prises par des humains
Si le développement a été guidé par le résultat, ça me va
C’est un outil vraiment superbe et utile
Mais dans un environnement de production, il est difficile de l’utiliser immédiatement pour les raisons évoquées plus haut
Ce serait bien d’avoir des paquets Debian ou RPM
Pour compiler directement depuis les sources, il suffit d’utiliser la commande suivante
Personnellement, si un
install.shest fourni, je m’attends à ce qu’il privilégie une installation depuis les sources localesC’est ce genre de petits outils simples qui me font rester dans le terminal
Je me demande ce que signifie « Git repository name and branch »
Est-ce une fonctionnalité qui détecte si le processus en cours d’exécution a été lancé depuis l’intérieur d’un dépôt Git ?
.gitLien vers le code concerné
L’idée est excellente. J’avais autrefois créé un alias « whodis » pour trouver le PID qui ouvre un port, mais ça, c’est bien plus puissant
Outil vraiment impressionnant. Merci de l’avoir partagé
Est-ce que ça vous dérangerait si je créais un paquet AUR ?
L’un des atouts d’Arch, c’est que ce genre d’outils intéressants arrive très vite sur l’AUR