Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

witr : comprendre pourquoi un processus tourne

Par mis à jour le

Améliorer cette page

Quand un processus inconnu consomme du CPU, qu'un port est déjà pris ou qu'un service revient sans cesse, la vraie question n'est pas quoi, mais pourquoi. Les outils classiques (ps, top, lsof, ss, systemctl, docker ps) montrent l'état, et vous laissent corréler à la main. witr (Why Is This Running) répond directement : il trace l'ancêtre d'un processus et reconstitue la chaîne qui l'a fait exister (systemd, service, conteneur, shell). Ce guide montre comment l'installer et l'utiliser pour diagnostiquer vite. Les sorties reproduites viennent de witr 0.3.3, la dernière version publiée, exécuté sur Debian 13, Ubuntu 24.04 et AlmaLinux 10.

  • Installer witr sur Linux (binaire, paquet, gestionnaire)
  • Tracer l'origine d'un processus par nom, PID, port, fichier ou conteneur
  • Lire la chaîne d'ancêtres (Why It Exists) et les avertissements
  • Diagnostiquer un port occupé ou un processus mystérieux en une commande

ps et lsof exposent l'état : un PID, une commande, un port. Mais ils ne disent pas d'où vient le processus. witr corrèle ces couches à votre place et affiche la lignée : qui a lancé quoi, via quel service ou quel conteneur, jusqu'à systemd.

QuestionOutil classiquewitr
Quel PID, quelle commande ?ps, topoui
Quel processus tient ce port ?ss -tlnp, lsof -iwitr --port
Pourquoi ce processus existe ?corrélation manuellechaîne d'ancêtres
Quel service systemd le gère ?systemctl statusaffiché directement

witr est un binaire Go statique (Linux, macOS, FreeBSD, Windows). La méthode la plus sûre consiste à télécharger le binaire de la release et à vérifier son empreinte contre le fichier SHA256SUMS publié à côté, plutôt que d'exécuter un script d'installation.

Fenêtre de terminal
VERSION=0.3.3
curl -fsSLO "https://github.com/pranshuparmar/witr/releases/download/v${VERSION}/witr-linux-amd64"
curl -fsSLO "https://github.com/pranshuparmar/witr/releases/download/v${VERSION}/SHA256SUMS"
grep ' witr-linux-amd64$' SHA256SUMS | sha256sum -c -
sudo install -m 755 witr-linux-amd64 /usr/local/bin/witr

La commande sha256sum -c doit répondre witr-linux-amd64: OK avant l'installation (vérifié sur les trois distributions). Un binaire arm64 est publié sous le même schéma de nom.

Vérifiez l'installation :

Fenêtre de terminal
witr --version
witr v0.3.3 (commit 86831e80c59c54e19c74cdbd126ed7ff6bcad756, built 2026-06-24T06:47:19Z)

Interrogez un processus par son nom. Si plusieurs correspondent, witr liste les candidats avec leur PID, ici deux sleep lancés depuis un shell :

Fenêtre de terminal
witr sleep
Multiple matching processes found:
[1] sleep (pid 3156)
sleep 601
[2] sleep (pid 3157)
sleep 602
Re-run with:
witr --pid <pid>

Ciblez alors le PID voulu. La sortie ci-dessous est celle d'un sleep 600 lancé depuis le shell d'un conteneur Debian 13, relevée telle quelle :

Fenêtre de terminal
witr --pid 3682
Target : sleep
Process : sleep (pid 3682)
User : root
Command : sleep 600
Started : just now (Wed 2026-09-30 02:49:38 +00:00)
Why It Exists :
bash (pid 1) → sleep (pid 3682)
Source : bash (shell)
Working Dir : /tmp
Warnings :
• Process is running as root
• Process is running from a suspicious working directory: /tmp

La section Why It Exists donne la chaîne d'ancêtres, et Source dit ce qui porte le processus : ici un shell. Sur un serveur, un démon lancé par systemd remonte jusqu'à systemd (pid 1), et witr ajoute alors le service et son unit file (le README du projet documente la ligne Unit File pour Linux). Les Warnings signalent des points de vigilance : exécution en root, répertoire de travail inhabituel.

witr ne se limite pas aux noms de processus. Les drapeaux couvrent les questions de diagnostic les plus fréquentes :

Fenêtre de terminal
# Quel processus écoute sur le port 5432 ?
witr --port 5432
# Quel processus tient ce fichier ouvert (verrou) ?
witr --file /var/lib/dpkg/lock
# D'où vient ce conteneur ?
witr --container redis
# Correspondance exacte (pas de recherche floue)
witr nginx --exact
# Lignée en arbre, ou en une seule ligne pour un script
witr --tree --port 8080
witr --short --port 8080

witr --port remplace à lui seul le réflexe ss -tlnp | grep suivi d'un systemctl status, et remonte en plus la lignée du processus trouvé. Mesuré avec un nc -l -p 8080, la sortie ajoute une ligne Sockets : 0.0.0.0:8080 (TCP | LISTENING), et --short réduit tout à bash (pid 1) → nc (pid 3165). L'option --file trouve aussi un descripteur hérité : un fichier ouvert par un shell puis passé à la commande qu'il a lancée est attribué à cette commande.

Le scénario classique : un service refuse de démarrer car son port est occupé. Plutôt que d'enchaîner ss, lsof et systemctl, une commande suffit :

Fenêtre de terminal
witr --port 8080

witr identifie le processus, et indique s'il provient d'un service systemd, d'un conteneur Docker ou d'un shell, vous évitant de tuer aveuglément un PID dont vous ignorez la provenance.

  • witr répond au pourquoi un processus tourne, pas seulement au quoi
  • Il trace la chaîne d'ancêtres (Why It Exists) jusqu'à systemd, et pointe l'unit file
  • Cibles : nom, --pid, --port, --file, --container
  • Les Warnings ajoutent une lecture sécurité (root, working dir suspect)
  • Binaire Go unique, à installer de préférence depuis la release en vérifiant SHA256SUMS ; les paquets de distribution ont une ou plusieurs versions de retard
  • Idéal pour diagnostiquer vite un port occupé ou un processus mystérieux

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn