Un petit outil terminal (TUI) écrit en Rust pour détecter et gérer facilement les processus de développement locaux qui écoutent des ports TCP (serveurs, outils de dev, bases locales, etc.). Il liste les services "de dev" du même utilisateur, affiche leur PID, port, nom et commande, et permet de tuer proprement un processus depuis l'interface.
Principales caractéristiques
- Découverte des sockets d'écoute TCP de l'utilisateur courant (via
lsof). - Filtrage heuristique des processus « dev » (node, python, php, cargo, java, nginx, redis, …).
- Interface terminal interactive avec sélection, rafraîchissement auto et actions (kill).
- Tentative d'arrêt propre (SIGTERM) puis forcé (SIGKILL) si nécessaire.
- Auto-rafraîchissement toutes les 10s + touche pour forcer.
Prérequis
- Système Unix-like (macOS / Linux). L'outil s'appuie sur utilitaires système (
lsof,ps,kill) — ils doivent être disponibles dans lePATH. - Rust / Cargo pour compiler (ou un binaire précompilé).
- Terminal capable d'afficher les interfaces TUI.
Compilation & exécution
- Construire en debug :
cargo build
- Construire en release :
cargo build --release
- Lancer directement avec Cargo (développement) :
cargo run --release
- Exécutable après compilation :
./target/release/localhostservicecs
Note : lancer le binaire avec des privilèges différents (ex. sudo) changera l'ensemble des processus visibles. Par défaut l'outil n'affiche que les processus appartenant à l'utilisateur courant.
Une fois compilé, tu peux installer le binaire dans un répertoire du PATH système pour l'utiliser depuis n'importe quel terminal et n'importe quel répertoire.
# 1. Compiler en release (si pas déjà fait)
cargo build --release
# 2. Créer un lien symbolique vers /opt/homebrew/bin
ln -s "$(pwd)/target/release/localhostservicecs" /opt/homebrew/bin/listServ
# 3. Vérifier que c'est bien installé
which listServ
listServ # Devrait lancer l'application# 1. Compiler en release
cargo build --release
# 2. Option A : Créer un lien symbolique dans /usr/local/bin
sudo ln -s "$(pwd)/target/release/localhostservicecs" /usr/local/bin/listServ
# 2. Option B : Copier le binaire directement
sudo cp target/release/localhostservicecs /usr/local/bin/listServ
# 3. S'assurer que c'est exécutable
sudo chmod +x /usr/local/bin/listServ
# 4. Vérifier
which listServ# Depuis n'importe quel répertoire, lance simplement :
listServ
# Ou avec des chemins, arguments, etc. (si l'app les supporte)
listServ# Supprimer le lien ou le binaire
rm /opt/homebrew/bin/listServ
# ou
sudo rm /usr/local/bin/listServ# Voir exactement où se trouve la commande
which listServ
# Voir si c'est un lien symbolique et sa cible
ls -la /opt/homebrew/bin/listServUtilisation (raccourcis clavier)
- Flèches haut / bas ou
j/k: naviguer dans la liste. d(ouDelete/Backspace) : demander à tuer le processus sélectionné (ouvre une confirmation).Enter(dans le popup) : confirmer et envoyerSIGTERMpuis éventuellementSIGKILL.Esc/n: annuler la confirmation ou revenir en arrière.r: rafraîchir la liste manuellement.qouEscen écran normal : quitter l'application.
Comportement & limites
- Détection basée sur une liste de mots-clés (
DEV_KEYWORDS) qui reconnaissent les noms binaires courants de runtime et outils de dev. Cela peut produire des faux positifs ou manquer des outils personnalisés. - L'outil ne fera pas apparaître les processus appartenant à un autre utilisateur (sauf si exécuté avec des droits permettant de les voir).
- Nécessite
lsofetps. Silsofest absent, la liste restera vide. - Les commandes
killsont exécutées via des appels système externes ; l'outil affiche un message indiquant si le kill a réussi ou échoué.
Sécurité et précautions
- Tuer un processus peut entraîner perte de travail non sauvegardé (ex. tâches en cours, serveurs avec sessions, bases de données). Vérifiez toujours la commande affichée avant de confirmer.
- L'outil exécute des commandes systèmes simples (
lsof,ps,kill) — utilisez-le avec prudence.
Dépannage rapide
- La liste est vide :
- Vérifiez que
lsofest installé et exécutable. - Assurez-vous d'avoir des serveurs locaux en écoute (ex.
npm start,python -m http.server, etc.).
- Vérifiez que
- « Permission denied » ou résultats incomplets :
- Exécuter en tant qu'autre utilisateur changera la visibilité ; évitez
sudosauf si vous comprenez l'impact.
- Exécuter en tant qu'autre utilisateur changera la visibilité ; évitez
- Processus non détecté ou mal identifié :
- Le nom exécutable peut ne pas correspondre aux mots-clés — vous pouvez étendre la liste dans le code source (
DEV_KEYWORDS) si nécessaire.
- Le nom exécutable peut ne pas correspondre aux mots-clés — vous pouvez étendre la liste dans le code source (
Contribution / Licence
- Ce dépôt ne contient pas forcément de fichier
LICENSE. Si vous comptez réutiliser ce code, ajoutez une licence appropriée ou contactez l'auteur du projet. - Pour améliorer la détection ou corriger des cas particuliers, éditez la liste
DEV_KEYWORDSet/ou la logique de parsing delsof/ps.
Fichier(s) importants
src/main.rs: logique principale (découverte, UI, actions).Cargo.toml: dépendances (ex.crossterm,ratatui).
Remarques finales Cet outil vise à faciliter la gestion rapide des processus de développement locaux depuis le terminal. Il est volontairement simple et extensible — si vous voulez que j'ajoute des fonctionnalités (ex. filtre par nom, exporter la liste, action de redémarrage, affichage de logs), dites-moi lesquelles et je proposerai des modifications de code.

