- Witr (why-is-this-running) es una herramienta que muestra con claridad por qué se está ejecutando un proceso, servicio o puerto específico en sistemas Linux
- A diferencia de
ps, top, lsof y otras herramientas existentes, que solo muestran “qué está en ejecución”, presenta en una sola pantalla la relación causal de “por qué está en ejecución”
- Mediante análisis basado en PID, rastrea el origen del proceso, la ruta de ejecución, la razón por la que se mantiene activo y el contexto al que pertenece
- Explica la causa de ejecución al integrarse con diversas fuentes como systemd, docker, pm2, cron y shell, y funciona de forma de solo lectura y no destructiva
- Es una herramienta que reduce el tiempo de comprensión durante la depuración y la respuesta a incidentes, y permite entender de un vistazo la estructura de ejecución de sistemas complejos
Propósito y concepto
- La pregunta central de Witr es: “¿Por qué se está ejecutando esto? (why-is-this-running)”
- Rastrea el origen y la causa de todos los elementos en ejecución, como procesos, servicios y puertos
- Muestra explícitamente las causas indirectas de ejecución a través de varias capas (supervisor, contenedor, servicio, shell, etc.)
- Mientras que las herramientas existentes solo ofrecen estado y metadatos, Witr expresa claramente las relaciones causales
- Como resultado, genera una salida fácil de leer para humanos que muestra “qué, cómo, por qué y en qué contexto está en ejecución”
Objetivos principales
- Explicar la razón de existencia de un proceso y ofrecer información que va más allá de si simplemente está ejecutándose
- Reducir el tiempo de depuración y respuesta a incidentes
- Se puede usar de inmediato sin configuración, con garantía de solo lectura y seguridad
- Prioriza la claridad por encima de la exhaustividad
- No incluye funciones de monitoreo, análisis de rendimiento ni recuperación automática
Cómo funciona
- Interpreta todos los objetivos con el proceso (PID) como eje central
- Puertos, servicios, contenedores y comandos se vinculan todos a un PID
- Con base en el PID, construye una cadena causal de ejecución (causal chain)
- Cuatro preguntas clave
- Qué está en ejecución
- Cómo se inició
- Qué lo mantiene en ejecución
- A qué contexto pertenece
Objetivos compatibles
- Admite como entrada nombre de proceso/servicio, PID y número de puerto
- Si al ingresar un nombre coinciden varios procesos, solicita elegir un PID
- Con las opciones
--pid y --port se puede hacer análisis basado en un proceso o puerto específico
Estructura de salida
- Target: objetivo especificado por el usuario
- Process: ejecutable, PID, usuario, comando, hora de inicio, número de reinicios
- Why It Exists: linaje causal (ancestry chain) del proceso
- Source: sistema principal responsable de la ejecución (por ejemplo, uno de systemd, docker, pm2, cron o shell)
- Context: directorio de trabajo, repositorio Git, contenedor Docker, información de bind, etc.
- Warnings: advertencias no bloqueantes como ejecución con privilegios de root, escucha en interfaces públicas, ejecución prolongada, uso excesivo de memoria, etc.
Opciones de línea de comandos
--pid, --port: análisis de un PID o puerto específico
--short: resumen en una línea
--tree: muestra el árbol completo de procesos
--json: salida en formato JSON
--warnings: muestra solo advertencias
--no-color: desactiva los colores
--env: muestra solo variables de entorno
--help: muestra la ayuda
Instalación y eliminación
- Se distribuye como un binario estático único para Linux
- Instalación con script (recomendada)
- Instalación manual
- Descarga directa de binarios para
amd64 y arm64, y verificación de checksum
- Después de dar permisos de ejecución, se mueve al PATH
- Verificación y eliminación
- Se puede verificar con
witr --version y man witr
- Se puede eliminar con
sudo rm -f /usr/local/bin/witr
- Compatibilidad con Nix Flake: se puede ejecutar con
nix run github:pranshuparmar/witr -- --port 5000
Plataforma y permisos
- Solo para Linux
- Recopila información a través del acceso a
/proc
- Para consultar información de algunos procesos, se requieren privilegios de sudo
1 comentarios
Opiniones de Hacker News
Sugieren que el GIF en bucle del README se reinicia demasiado rápido y cuesta leer toda la salida
Estaría bien que se quedara quieto unos segundos más
Con ver el último fotograma ya se transmite toda la información necesaria
Ya lo cambié por una imagen estática y agradezco todas las sugerencias
Muestra que el comando es rápido, pero todo ya está en el último fotograma y además es menos eficiente en ancho de banda
Basta con dejarla detenida al 100% en la pantalla de salida. Todo el mundo ya sabe cómo se ve alguien escribiendo en una terminal
Esta herramienta no busca reemplazar las herramientas de monitoreo/observación existentes
Sirve para entender rápido, al conectarte por SSH, “¿por qué se está ejecutando esto?”
Está dispuesto a ajustar el rumbo según el feedback
Siempre ha sido difícil averiguar para qué sirve un proceso cuando de repente empieza a consumir muchos recursos
Al principio pensé que también explicaba la función del proceso, pero no era eso
Aun así, es una gran herramienta. Más adelante podría ampliarse combinando la página man + una base de datos de procesos
Parece útil, pero por ahora la salida muestra sobre todo el ppid, así que te dice “quién lo ejecutó” más que “por qué se ejecutó”
Está bien que soporte varios formatos de salida. Pensando en entornos automatizados, sería aún mejor que el valor por defecto fuera JSON o un formato amigable para grep
La salida por defecto está pensada para que sea fácil de leer para humanos, pero ya existe soporte para automatización con una bandera JSON
También voy a pensar en una forma más fácil de filtrar con grep
La herramienta es interesante, pero no me gusta instalar un binario con
curlMás adelante pueden surgir preguntas como “¿cómo se instaló esto?” o “¿están al día los parches de seguridad?”
Estaría bueno que hubiera paquetes deb o snap
curlno les sirve a todosComo es la primera versión, empecé por algo simple, pero si gana popularidad planeo hacer distribución oficial en paquetes
wdtci: “what does this curl install?”systemctl status $pidtambién se puede obtener bastante informaciónLa frase “witr se basa en la confianza” y la explicación de que fue desarrollado con ayuda de IA/LLM se sienten contradictorias
Si los resultados del LLM se revisan y el código pasa por una revisión adecuada, creo que puede ser confiable
Aun así, valoro que se haya dicho de forma transparente que se usó un LLM
Las decisiones reales las tomó una persona
Si se desarrolló con foco en el resultado, me parece bien
Es una herramienta realmente genial y útil
Pero en un entorno de producción cuesta usarla de inmediato por las razones mencionadas arriba
Ojalá haya paquetes Debian o RPM
Si quieres compilarla directamente desde el código fuente, puedes usar este comando
Personalmente, si existe un
install.sh, esperaría que instale primero desde el código fuente localEse es el tipo de cosas que hace que estas herramientas simples se queden siempre en mi terminal
Me pregunto qué significa “Git repository name and branch”
¿Es una función para detectar si el proceso en ejecución se lanzó dentro de un repositorio Git?
Enlace al código relacionado
La idea está muy buena. Antes yo tenía un alias llamado “whodis” para encontrar el PID que abría un puerto, pero esto es mucho más potente
Es una herramienta realmente impresionante. Gracias por compartirla
¿Te molestaría si yo hiciera un paquete AUR?
Una de las ventajas de Arch es que este tipo de herramientas interesantes aparecen en AUR súper rápido