लिनक्स पर, मैं कैसे देख सकता हूं कि एक फाइल के माध्यम से कितनी दूर एक प्रक्रिया है?


13

अगर मेरे पास एक पाइप्ड कमांड है जैसे कि

   cat myfile | processor_application

जहां प्रोसेसर_प्प्लिकेशन मानक में, चंक्स में, प्रोसेस करने के लिए कुछ पढ़ रहा है, क्या यह देखना संभव है कि फ़ाइल बिल्ली से कितनी दूर है?

संभवतः lsof का उपयोग कर रहे हैं?

धन्यवाद!


अब तक के जवाब के लिए धन्यवाद! हालांकि, मुझे स्पष्ट होना चाहिए: कमांड पहले से ही चल रही है।
वोडो

आह हाँ, तो pv इतना आसान नहीं है। आप इसे और अधिक स्पष्ट करने के लिए अपने मूल प्रश्न को संपादित करना चाह सकते हैं।
फिल होलेनबैक

वास्तव में, इस प्रश्न में तीन महान अलग-अलग उत्तर हैं, इसलिए मैं इसे छोड़ दूंगा जैसा कि यह है।
वोडो

1
संक्षेप में, वे हैं: 1. pv का उपयोग करें (आपके शुरू होने से पहले) 2. lsof -o का उपयोग करें (यदि ऑफ़सेट समर्थित हैं) 3. बिल्ली के ज्ञात PID के लिए / proc / <PID> / io पर wchar का मूल्य देखें प्रक्रिया
वोडो

जवाबों:


13

ऐसा करने के लिए आप pv का उपयोग कर सकते हैं

pv file | processor_application

जैसा कि pv पास है यह सीधे stdin है यह stdout के लिए आपको बिल्ली का उपयोग करने की आवश्यकता नहीं है।

संपादित करें जैसा कि आपका कार्यक्रम पहले से ही चल रहा है, तो catप्रक्रिया की पीआईडी ​​ढूंढें और फिर की सामग्री को देखें

/proc/<PID>/io

जो आपको बताएगा कि उसने कितने बाइट लिखे हैं - wchar।


मैंने केवल आपका संपादन देखा है! यह पूरी तरह से श्रृंखला में (i) pv की अनुपस्थिति को देखते हुए काम करता है, (ii) lsof -o काम करता है। धन्यवाद!
वोडो

9

पूर्ण रूप से! पाइप दर्शक सटीक है कि करता है। बस इसे अपनी पाइपलाइन में डालें:

cat myfile | pv | processor_application

आप catउपरोक्त उदाहरण में दूर का अनुकूलन कर सकते हैं :

pv myfile | processor_application

जिसे वास्तविक प्रगति संकेतक प्रदान करने का लाभ है, क्योंकि pv सीधे इनपुट के आकार को निर्धारित कर सकता है। यदि आप पाइपलाइन के बीच में pv का उपयोग करते हैं, तो सटीक प्रगति पाने के लिए आपको फ़ाइल आकार की आपूर्ति करने की आवश्यकता है:

input_process | pv -s 100M -p | processor_application

Pv को कस्टमाइज़ करने के लिए अधिक विकल्पों के लिए वेबसाइट देखें।


मुझे पसंद है pvजब यह उपलब्ध है :-)
voretaq7

pvउपयोग करके पाइप लाइन में डालना आसान है mkfifoऔर gdb(gdb के साथ चार syscalls p)।
user1686

@ शुद्धता आपको उस तरह नहीं छेड़ सकती है। एक वास्तविक उत्तर लिखें और प्रदर्शित करें - अब मैं बहुत उत्सुक हूं।
फिल होलेनबैक

2
एक जवाब होने के लिए बहुत ज्यादा हैक, लेकिन यहां।
user1686

6

यदि प्रक्रिया पहले से ही चल रही है lsof में एक size/offsetकॉलम है जो आपके लिए सहायक हो सकता है - उस बिल्ली प्रक्रिया का PID ढूंढें जिसे आप निरीक्षण करना चाहते हैं और फिर lsof -o -p [PID]

यदि प्रक्रिया अभी तक नहीं चल रही है, pvजैसा कि दूसरों ने सुझाव दिया है एक अच्छा विकल्प (यह मानते हुए कि आपके सिस्टम में यह उपयोगिता है)।


यह lsof विकल्प है जिसे मैंने देखा था। लेकिन: क्या होगा अगर lsof -o को अनुमति नहीं है या सिस्टम पर अनुपलब्ध है?
वोडो

यदि -oआपके सिस्टम पर काम नहीं करता है, तो मुझे लगता है कि आप का उपयोग करने के लिए सम्मान के साथ बहुत अधिक खराब कर रहे हैं lsof: - / (मुझे लगता है कि आप catप्रक्रिया शुरू करने वाले उपयोगकर्ता के रूप में या रूट के रूप में lsof चला रहे हैं ?)
voretaq7

हाँ, दोनों की कोशिश की। मैं कारणों के लिए खोज कर रहा हूँ lsof
चेतावनियों के

Lsof FAQ, gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ पर प्रतिबिंबित , बिंदु / प्रश्न 3.43.2.3 में पता चलता है कि lsof -o लिनक्स पर संभव नहीं है! मुझे लगता है कि यह अधिक व्यापक है, क्योंकि अन्य उपयोगकर्ता lsof का उपयोग करते हुए दिखाई देते हैं -o
वोदो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.