শেল স্ক্রিপ্টের অভ্যন্তরে, আমাকে উইন্ডোটির অপেক্ষা করতে হবে যার শিরোনামটিতে স্ট্রিং উপস্থিত রয়েছে, কিছু পদক্ষেপ করা উচিত এবং তারপরে এটি অদৃশ্য হওয়ার জন্য অপেক্ষা করুন এবং আরও কিছু ক্রিয়া করুন।
গতকাল অবধি, আমার এই সাধারণ কোডটি ছিল। এটির সাথে সমস্যাটি হ'ল স্ক্রিপ্টটি চলমান অবস্থায় ডিস্কটিকে বিদ্যুৎ সাশ্রয় অবস্থায় রাখা যায় না এবং এটি বেশ কয়েক ঘন্টার জন্য হতে পারে:
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আমি ক্রাশ হয়েছি এবং অদ্ভুত ফলাফল দেয় না, যেমনটি আমি আগে থেকেই workarounded করেছি, তবে এটি প্রায় 15% সিপিইউ চুষে দেয় উইন্ডোটি প্রদর্শিত হওয়ার অপেক্ষায় বামে। সুতরাং এর অর্থ আমি ডিস্ককে জাগিয়ে তোলে এমন সাধারণ কোড থেকে মুক্তি পেয়েছি, কয়েক ঘন্টা সিপিইউ নষ্ট করে ফেলেছে এমন কোডটি লিখতে, এবং আমার উদ্দেশ্যটি প্রথম স্থানে শক্তি সঞ্চয় করছিল।xprop -spyআমি যখনই ফোকাস পরিবর্তন করব তখনই আমাকে অবহিত করবে (যা দিয়ে আমি কাজটি করেছি$_line) বা উইন্ডোজ তৈরি এবং ধ্বংস করব। এটি এক্সডটুলের চেয়ে বেশি ঘন ঘন ডিস্ক জেগে।
আমি একটি সাধারণ প্রোগ্রাম সন্ধান করছি যা শিরোনামটি $stringউপস্থিত হওয়া বা অদৃশ্য হওয়ার সাথে উইন্ডোটির জন্য অপেক্ষা করে । এটি একটি বিদ্যমান কমান্ড লাইন সরঞ্জাম, একটি অজগর স্ক্রিপ্ট, সংকলনযোগ্য সি কোড হতে পারে ... তবে আমার স্ক্রিপ্টে এটি কোনওভাবে সংহত করতে সক্ষম হওয়া উচিত (এমনকি এটি কেবল একটি ফিফোতে কিছু তথ্য লিখলেও)!
fatraceডিস্ক ওয়েকআপগুলি পরীক্ষা করার জন্য ব্যবহার করছি এবং এটি আমাকে bashপড়তে /bin/sleepএবং /usr/bin/wmctrlপ্রতি অর্ধেক সেকেন্ডে বলে, তাই আমি এমন কিছু প্রোগ্রাম খুঁজছি যা উইন্ডো ইভেন্টগুলির জন্য অপেক্ষা করবে। আমি কিছু অনুপস্থিত করছি?
btraceথেকে blktraceডিস্ক কার্যকলাপ উৎস তদন্ত করতে।
xwininfoহতে পারে, এটি অবশ্যই ডাব্লুএমটিআরটিএল এর চেয়ে অনেক কম ভাগ করা লাইব্রেরি লোড করে এবং খালি এক্স এর কাছাকাছি স্তরে পরিচালনা করে
strace -f -e trace=file wmctrl -lতথ্যমূলক হওয়া উচিত।