शेल स्क्रिप्ट के अंदर, मुझे उस विंडो के लिए प्रतीक्षा करने की आवश्यकता होती है, जिसमें उसके शीर्षक पर एक स्ट्रिंग दिखाई देती है, कुछ क्रिया करते हैं, और फिर उसके गायब होने की प्रतीक्षा करते हैं, और कुछ अन्य कार्रवाई करते हैं।
कल तक, मेरे पास यह सरल कोड था। इसके साथ समस्या यह है कि डिस्क को पावर सेविंग स्थिति में नहीं रखा जा सकता है, जबकि स्क्रिप्ट चालू रहती है, और यह कई घंटों के लिए हो सकती है:
while :; do
until wmctrl -l | grep -q "$string"; do # until
sleep 0.5
done
: do action 1
while wmctrl -l | grep -q "$string"; do # while
sleep 0.5
done
: do action 2
done
चूँकि मैंने तय किया था कि कोड डिस्क पर जोर से जाग्रत हो रहा है, इसलिए मैं कुछ कमांड लाइन टूल्स के प्रलेखन से गुजरा, और खिड़की के गायब होने xdotool
का इंतजार करने और xprop
खिड़की के गायब होने का पता लगाने का निर्णय लिया :
while :; do
# we use `until' because sometimes xdotool just crashes
until xdotool search -sync -all -onlyvisible -pid $pid -name "$string"; do
:
done
# xdotool isn't trustworthy either, so check again
wmctrl -l | grep -q "$string" ||
continue
: do action 1
xprop -spy -root _NET_CLIENT_LIST_STACKING | while read line; do
if [[ ! ${_line:-} || $_line = $line ]]; then
_line=$line
continue
else
_line=$line
if wmctrl -l | grep -q "$string"; then
continue
else
: do action 2
break
fi
fi
done
done
अब मुझे ऊपर कोड के साथ दो नई समस्याएं हैं:
xdotool
न केवल क्रैश और अजीब परिणाम देता है, जैसा कि मैंने पहले वर्कअराउंड किया है, लेकिन यह सीपीयू का लगभग 15% चूसता है जबकि खिड़की के सामने आने का इंतजार करता है। तो इसका मतलब है कि मुझे साधारण कोड से छुटकारा मिल गया जो डिस्क को चलाता है, कोड लिखने के लिए जो सीपीयू को घंटों बर्बाद कर रहा है, और मेरा इरादा पहली जगह में बिजली की बचत कर रहा था।xprop -spy
हर बार मुझे ध्यान केंद्रित करने (जो मैंने के माध्यम से हल किया है$_line
) को बदलने या खिड़कियां बनाने या नष्ट करने के लिए सूचित करेगा । यह डिस्क को xdotool की तुलना में अधिक बार जागता है।
मैं एक साधारण प्रोग्राम की तलाश कर रहा हूं जो सिर्फ खिड़की के शीर्षक $string
या गायब होने की प्रतीक्षा करता है । यह एक मौजूदा कमांड लाइन टूल, एक पायथन स्क्रिप्ट, कंपाइलेबल सी कोड हो सकता है ..., लेकिन मुझे इसे किसी भी तरह से अपनी स्क्रिप्ट में समेटने में सक्षम होना चाहिए (भले ही यह किसी जानकारी को किसी तारीख को लिखता हो)!
fatrace
डिस्क wakeups के लिए जाँच करने के लिए, और यह बताता है मुझे bash
पढ़ता है /bin/sleep
और /usr/bin/wmctrl
हर आधे सेकंड, तो इस कारण मैं कुछ प्रोग्राम है जो वास्तव में खिड़की की घटनाओं के लिए इंतजार करेंगे की तलाश में हूँ। क्या मैं कुछ भूल रहा हूँ?
btrace
से blktrace
डिस्क गतिविधि के स्रोतों की जांच के लिए।
xwininfo
उपयोग का हो सकता है, यह निश्चित रूप से wmctrl की तुलना में बहुत कम साझा पुस्तकालयों को लोड करता है और नंगे एक्स के करीब एक स्तर पर संचालित होता है।
strace -f -e trace=file wmctrl -l
जानकारीपूर्ण होना चाहिए।