- Witr (why-is-this-running) é uma ferramenta que mostra com clareza por que um determinado processo, serviço ou porta está em execução em sistemas Linux
- Ao contrário de ferramentas tradicionais como
ps, top e lsof, que apenas mostram “o que está em execução”, ela exibe em uma única tela a relação causal do “por que está em execução”
- Por meio de análise baseada em PID, rastreia a origem do processo, o caminho de execução, o motivo de ele continuar ativo e o contexto ao qual pertence
- Explica a causa da execução em integração com várias fontes, como systemd, docker, pm2, cron e shell, e opera de forma somente leitura e não destrutiva
- É uma ferramenta que reduz o tempo de entendimento durante depuração e resposta a incidentes, permitindo compreender de relance a estrutura de execução de sistemas complexos
Objetivo e conceito
- A pergunta central do Witr é: “Por que isto está em execução? (why-is-this-running)”
- Rastreia a origem e a causa de todos os itens em execução, como processos, serviços e portas
- Mostra explicitamente causas indiretas de execução em várias camadas (supervisor, container, service, shell etc.)
- Enquanto as ferramentas existentes fornecem apenas estado e metadados, o Witr expressa com clareza as relações causais
- Como resultado, ele apresenta em formato fácil de ler “o que, como, por que e em que contexto está em execução”
Principais objetivos
- Explicar a razão da existência de um processo, indo além de simplesmente informar se ele está em execução
- Reduzir o tempo de depuração e resposta a incidentes
- Pronto para uso sem configuração, com somente leitura e garantia de segurança
- Prioriza clareza em vez de completude
- Não inclui recursos de monitoramento, análise de desempenho nem recuperação automática
Como funciona
- Interpreta todos os alvos com foco em processos (PID)
- Portas, serviços, containers e comandos são todos conectados a PIDs
- Com base no PID, constrói uma cadeia causal de execução (causal chain)
- Quatro perguntas centrais
- O que está em execução
- Como foi iniciado
- O que o está mantendo em execução
- A que contexto pertence
Alvos suportados
- Suporta nome de processo/serviço, PID e número de porta como entrada
- Se vários processos corresponderem ao nome informado, solicita a escolha do PID
- Também permite análise de um processo ou porta específicos com as opções
--pid e --port
Estrutura da saída
- Target: alvo especificado pelo usuário
- Process: executável, PID, usuário, comando, horário de início, número de reinicializações
- Why It Exists: linhagem causal (ancestry chain) do processo
- Source: sistema principal responsável pela execução (por exemplo: systemd, docker, pm2, cron ou shell)
- Context: diretório de trabalho, repositório Git, container Docker, informações de bind etc.
- Warnings: avisos não bloqueantes, como execução com privilégio de root, escuta em interface pública, longa duração, uso excessivo de memória etc.
Opções de linha de comando
--pid, --port: analisam um PID ou porta específicos
--short: resumo em uma linha
--tree: mostra a árvore completa de processos
--json: saída em formato JSON
--warnings: mostra apenas avisos
--no-color: desativa cores
--env: mostra apenas variáveis de ambiente
--help: mostra a ajuda
Instalação e remoção
- Distribuído como um único binário estático para Linux
- Instalação por script (recomendada)
- Instalação manual
- Download direto dos binários para
amd64 e arm64, com verificação de checksum
- Após conceder permissão de execução, mova para o PATH
- Verificação e remoção
- Verifique com
witr --version e man witr
- Pode ser removido com
sudo rm -f /usr/local/bin/witr
- Suporte a Nix Flake: pode ser executado com
nix run github:pranshuparmar/witr -- --port 5000
Plataforma e permissões
- Exclusivo para Linux
- Coleta informações por meio de acesso a
/proc
- Para verificar algumas informações de processos, pode ser necessário privilégio sudo
1 comentários
Comentários do Hacker News
Foi sugerido que o loop em GIF no README reinicia rápido demais, dificultando ler toda a saída
Seria bom se ele ficasse parado por mais alguns segundos
Só o último quadro já transmite toda a informação necessária
Já substituí por uma imagem estática e agradeço por todas as sugestões
Ele mostra que o comando é rápido, mas o último quadro já contém tudo e a eficiência de banda também é pior
Basta deixá-la parada em 100% da tela de saída. Todo mundo já sabe como é digitar no terminal
Esta ferramenta não pretende substituir ferramentas existentes de monitoramento/observação
A ideia é entender rapidamente “por que isso está rodando?” quando você acessa por SSH
Estou disposto a ajustar a direção com base no feedback
Sempre foi difícil descobrir a finalidade de um processo quando ele começa a consumir muitos recursos
No início achei que também explicasse a função do processo em si, mas não é o caso
Ainda assim, é uma ótima ferramenta. No futuro, seria legal expandir isso combinando páginas man + banco de dados de processos
Parece útil, mas no momento a saída mostra principalmente o ppid, então dá para saber “quem executou”, mas é difícil saber “por que foi executado”
É bom que suporte vários formatos de saída. Pensando em ambientes automatizados, seria ainda melhor se JSON ou um formato amigável para grep fosse o padrão
A saída padrão foi pensada para ser fácil de ler por humanos, mas a automação já é suportada com uma flag JSON
Também vou pensar em um formato mais fácil de usar com grep
É uma ferramenta interessante, mas instalar binário via
curlnão me agradaDepois podem surgir questões como “como isso foi instalado?” ou “os patches de segurança estão atualizados?”
Seria bom ter um pacote deb ou snap
curlnão serve para todo mundoComo é a primeira release, comecei de forma simples, mas se ganhar popularidade pretendo fazer distribuição oficial em pacotes
wdtci: “what does this curl install?”systemctl status $pidtambém pode fornecer bastante informaçãoA frase “witr é baseado em confiança” e a explicação de que foi desenvolvido com ajuda de AI/LLM parecem contraditórias
Se os resultados do LLM forem revisados e o code review for feito de verdade, acho que dá para confiar
Ainda assim, vejo com bons olhos o fato de terem sido transparentes sobre o uso de LLM
As decisões reais foram tomadas por humanos
Se o desenvolvimento foi orientado a resultados, acho ok
Ferramenta realmente ótima e útil
Mas em ambiente de produção, pelos motivos citados acima, é difícil usá-la de imediato
Seria bom ter pacotes Debian ou RPM
Para compilar direto do código-fonte, basta usar o comando abaixo
Pessoalmente, se existe um
install.sh, espero que ele priorize a instalação a partir do código-fonte localÉ esse tipo de ferramenta simples que me faz continuar no terminal
Fiquei curioso sobre o significado de “Git repository name and branch”
É uma funcionalidade para detectar se o processo em execução foi iniciado dentro de um repositório Git?
Link para o código relacionado
A ideia é ótima. Um tempo atrás eu criei um alias “whodis” para encontrar o PID que abriu uma porta, mas isso aqui é muito mais poderoso
Ferramenta realmente impressionante. Obrigado por compartilhar
Será que eu poderia criar um pacote AUR?
Uma das vantagens do Arch é que ferramentas interessantes como essa aparecem no AUR muito rapidamente