Witr - Linux सिस्टम में कोई process क्यों चल रहा है, यह समझाने वाला टूल
(github.com/pranshuparmar)- Witr (why-is-this-running) एक ऐसा टूल है जो Linux सिस्टम में किसी खास process, service, या port के क्यों चलने को स्पष्ट रूप से दिखाता है
- मौजूदा
ps,top,lsofआदि जहाँ सिर्फ “क्या चल रहा है” दिखाते हैं, वहीं यह “क्यों चल रहा है” की causal relationship को एक ही स्क्रीन पर दिखाता है - PID-आधारित analysis के जरिए process की origin, execution path, बने रहने की वजह, और जुड़े context को ट्रैक करता है
- systemd, docker, pm2, cron, shell जैसे कई sources के साथ जुड़कर चलने की वजह समझाता है, और read-only·non-destructive तरीके से काम करता है
- debugging और incident response के समय समझने में लगने वाला समय कम करता है, और complex सिस्टम की execution structure को एक नज़र में समझने में मदद करता है
उद्देश्य और अवधारणा
- Witr का मुख्य सवाल है, “यह क्यों चल रहा है? (why-is-this-running)”
- process, service, port जैसी सभी running entities की origin और वजह को ट्रेस करता है
- कई layers (supervisor, container, service, shell आदि) में फैली indirect execution causes को स्पष्ट रूप से दिखाता है
- जहाँ मौजूदा tools सिर्फ state और metadata देते हैं, Witr causal relationship को साफ़ तौर पर व्यक्त करता है
- नतीजतन “क्या, कैसे, क्यों, और किस context में चल रहा है” को इंसानों के पढ़ने लायक रूप में आउटपुट करता है
मुख्य लक्ष्य
- किसी process के मौजूद होने की वजह समझाना, और सिर्फ run हो रहा है या नहीं उससे आगे की जानकारी देना
- debugging और incident response का समय कम करना
- बिना configuration के तुरंत इस्तेमाल योग्य, read-only·safe
- पूर्णता से ज़्यादा स्पष्टता को प्राथमिकता
- monitoring, performance analysis, और auto-recovery features शामिल नहीं हैं
काम करने का तरीका
- हर target को process (PID) के केंद्र में रखकर समझता है
- port, service, container, command — सबको PID से जोड़ता है
- PID के आधार पर execution causal chain बनाता है
- चार मुख्य सवाल
- क्या चल रहा है
- यह कैसे शुरू हुआ
- इसे क्या बनाए रखे हुए है
- यह किस context से जुड़ा है
समर्थित target
- इनपुट के रूप में process/service name, PID, port number को सपोर्ट करता है
- name देने पर अगर कई processes match हों, तो PID चुनने को कहता है
--pid,--portoptions से किसी खास process या port पर analysis किया जा सकता है
आउटपुट संरचना
- Target: यूज़र द्वारा दिया गया target
- Process: executable, PID, user, command, start time, restart count
- Why It Exists: process की causal ancestry chain
- Source: execution के लिए ज़िम्मेदार मुख्य सिस्टम (जैसे systemd, docker, pm2, cron, shell में से एक)
- Context: working directory, Git repository, Docker container, bind information आदि
- Warnings: root privileges पर run होना, public interface पर listening, लंबे समय से चलना, ज़्यादा memory usage जैसी non-blocking warnings
command line options
--pid,--port: किसी खास PID या port का analysis--short: एक लाइन का सार--tree: पूरा process tree दिखाना--json: JSON format में output--warnings: सिर्फ warnings दिखाना--no-color: रंग बंद करना--env: सिर्फ environment variables दिखाना--help: help दिखाना
installation और removal
- single static Linux binary के रूप में distribute किया जाता है
- script install (recommended)
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash- CPU architecture अपने आप detect करके
/usr/local/bin/witrमें install करता है
- manual install
amd64,arm64के लिए binaries सीधे डाउनलोड करें और checksum verify करें- execute permission देने के बाद PATH में ले जाएँ
- verification और removal
witr --version,man witrसे जाँचेंsudo rm -f /usr/local/bin/witrसे हटाया जा सकता है
- Nix Flake support:
nix run github:pranshuparmar/witr -- --port 5000से चलाया जा सकता है
platform और permissions
- सिर्फ Linux के लिए
- जानकारी इकट्ठा करने के लिए
/procaccess का उपयोग- कुछ process जानकारी देखने के लिए sudo privileges की ज़रूरत पड़ सकती है
1 टिप्पणियां
Hacker News टिप्पणियाँ
सुझाव दिया गया कि README में GIF loop बहुत जल्दी फिर से शुरू हो जाता है, इसलिए पूरा output पढ़ना मुश्किल है
अच्छा होगा अगर वह कुछ सेकंड और रुका रहे
सिर्फ आख़िरी frame देखकर भी सारी ज़रूरी जानकारी मिल जाती है
इसे पहले ही static image से बदल दिया गया है, और सुझाए गए सभी विचारों के लिए धन्यवाद
यह दिखाता है कि command तेज़ है, लेकिन आख़िरी frame में सब कुछ पहले से मौजूद है और bandwidth efficiency भी कम है
output screen को 100% पर रुका हुआ रखा जा सकता है। terminal में typing कैसी दिखती है, यह सब पहले से जानते हैं
यह टूल मौजूदा monitoring/observability tools को replace करने के लिए नहीं है
इसका मकसद SSH से जुड़ने पर जल्दी समझना है कि “यह क्यों चल रहा है?”
feedback के आधार पर इसकी दिशा बदलने की इच्छा है
जब कोई process बहुत resource इस्तेमाल करने लगे, तब उसका मकसद समझना हमेशा मुश्किल रहा है
पहले मुझे लगा था कि यह process का function भी समझा देगा, लेकिन ऐसा नहीं था
फिर भी यह शानदार टूल है। बाद में इसे Man page + process DB जोड़कर विस्तार योग्य बनाया जा सकता है
उपयोगी लगता है, लेकिन अभी का output ज़्यादातर सिर्फ ppid दिखाता है, इसलिए “किसने चलाया” तो पता चलता है, लेकिन “क्यों चला” समझना मुश्किल है
कई output formats का समर्थन अच्छा है। automation environment को ध्यान में रखते हुए JSON या grep-friendly format को default बनाना और बेहतर हो सकता है
default output इंसानों के लिए पढ़ने योग्य बनाया गया है, लेकिन automation के लिए JSON flag पहले से उपलब्ध है
grep करना और आसान हो, ऐसे format पर भी सोचूँगा
दिलचस्प टूल है, लेकिन
curlसे binary install करना ठीक नहीं लगताबाद में “यह कैसे install हुआ?” या “security patch अपडेट है?” जैसी दिक्कतें आ सकती हैं
deb package या snap हो तो अच्छा रहेगा
curlinstall सबके लिए उपयुक्त नहीं हैयह पहला release था, इसलिए चीज़ों को सरल रखा गया, लेकिन अगर इसे लोकप्रियता मिलती है तो official package distribution की योजना है
wdtci: “what does this curl install?”systemctl status $pidcommand से भी बहुत-सी जानकारी मिल सकती है“witr भरोसे पर आधारित है” यह वाक्य और “AI/LLM की मदद से विकसित किया गया” यह विवरण विरोधाभासी लगता है
अगर LLM के output की समीक्षा हो और code review ठीक से किया जाए, तो इस पर भरोसा किया जा सकता है
फिर भी LLM के इस्तेमाल को पारदर्शी ढंग से बताया गया, यह अच्छी बात है
असली फ़ैसले इंसान ने लिए
अगर development नतीजों पर केंद्रित था, तो मुझे यह ठीक लगता है
यह सचमुच शानदार और उपयोगी टूल है
लेकिन ऊपर बताए गए कारणों से production environment में इसे तुरंत इस्तेमाल करना मुश्किल है
Debian या RPM package मिल जाए तो अच्छा होगा
source से सीधे build करने के लिए यह command इस्तेमाल की जा सकती है
व्यक्तिगत रूप से, अगर
install.shहै तो मैं local source-first install की उम्मीद करता हूँयही वजह है कि ऐसे सरल टूल terminal में लंबे समय तक बने रहते हैं
“Git repository name and branch” का मतलब क्या है, यह जानना चाहता हूँ
क्या यह पता लगाता है कि चल रहा process Git repository के अंदर चला था?
संबंधित code link
आइडिया शानदार है। पहले मैंने “whodis” alias बनाया था जो port खोलने वाले PID को ढूँढने के काम आता था, लेकिन यह उससे कहीं ज़्यादा शक्तिशाली है
यह सचमुच अद्भुत टूल है। साझा करने के लिए धन्यवाद
क्या मैं इसका AUR package बना सकता हूँ?
Arch की ख़ासियत यही है कि ऐसे दिलचस्प टूल बहुत जल्दी AUR पर आ जाते हैं