linux (वास्तविक समय) पर खुली प्रक्रिया फ़ाइलों की निगरानी करें


10

XYZ प्रक्रिया द्वारा खोली गई फाइलें कमांड के साथ मिल सकती हैं

ls -l /proc/PID/fd

वैसे भी क्या tailहर x सेकंड में ऑटो-रिफ्रेशिंग की तरह अधिक इंटरैक्टिव तरीके से किया जा सकता है ?

जवाबों:


15

watchआदेश का प्रयास करें :

watch -n 10 ls -l /proc/$$/fd

घड़ी अच्छी है।

आप एक पुराने स्कूल का उपयोग कर सकते हैं जबकि लूप:

while :
do
 ls -l /proc/$$/fd
 sleep 10
done

watchमें है procps डेबियन आधारित सिस्टम पर पैकेज और procps RedHat पर आरपीएम व्युत्पन्न प्रणालियों।


1
नींद का उपयोग लूप करते समय स्थिति के रूप में किया जा सकता है, इसलिए आपके उदाहरण को इस तरह से अधिक सुरुचिपूर्ण ढंग से लिखा जा सकता है: सोते समय 10; do ls -l / proc / $$ / fd; किया
ipozgaj

8

यदि आप प्रत्येक फ़ाइल को खोलना चाहते हैं, जैसा कि आप खोल रहे हैं, तो आप उसे फ़िल्टर कर सकते हैं strace। उदाहरण के लिए:

strace -p _pid_of_app_ -e trace=open,close

2
यह वास्तव में सबसे अच्छा जवाब है। मैं झंडे की सलाह दूंगा -yऔर -fयदि आप किसी शेल में चल रहे कुछ डिबग करने का प्रयास कर रहे हैं। बस शेल पीआईडी ​​को पास करें और -fकिसी भी कांटे का पालन करें।
ऐया

4

आप गठबंधन कर सकते हैं lsofऔर watch

उदाहरण के लिए watch "lsof -p 1234", आपको प्रत्येक 2 सेकंड में पीआईडी ​​1234 की सभी खुली फाइलों की एक सूची दी जाएगी। आप अपनी आवश्यकताओं को पूरा करने के लिए कुछ मापदंडों को बदल सकते हैं।


यह 2 सेकंड में एक सूची नहीं देगा। पैरामीटर -r 2 काम करने के लिए गायब है! -पी पीआईडी ​​है। जवाब बहुत गरीब है!
महात्मनिच

2
अच्छा, के लिए -rविकल्प के बारे में पता नहीं था lsof। इसलिए मैं हर दो सेकंड watchपर अमल lsofकरता था।
क्रिश्चियन

0

मैंने एक bash फ़ाइल बनाई जहाँ मैं एक फाइल में कमांड का आउटपुट लिख रहा था। फ़ाइल वर्तमान तिथि के आधार पर बनाई गई थी। यहां मैं खुली फाइलों की संख्या गिन रहा हूं।

#!/bin/bash
while :
do
 cd /proc/<PID>/fd
 today=$(date +"%m-%d-%Y")
 filename="/tmp/${today}.txt"
 ls -l | wc -l >> "${filename}"
 sleep 10
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.