Bir kabuk betiğinin içinde, başlığında bir dize olan bir pencerenin görünmesini beklemem, bazı eylemler yapmam ve sonra kaybolmasını beklemem ve başka bir eylem yapmam gerekiyor.
Düne kadar bu basit kodu aldım. Buradaki sorun, komut dosyası çalışır durumdayken diskin güç tasarrufu durumuna alınamaması ve saatlerce sürebilmesidir:
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
Bahsedilen kodun diski uyandırdığına karar verdiğim için, birkaç komut satırı aracının belgelerine geçtim xdotoolve pencerenin görünmesini beklemeye ve pencerenin xpropne zaman kaybolduğunu anlamaya karar verdim :
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
Şimdi yukarıdaki kod ile iki yeni sorun var:
xdotoolDaha önce geçici çözüm bulduğum gibi sadece çöküyor ve garip sonuçlar veriyor, aynı zamanda pencerenin görünmesini beklerken CPU'nun yaklaşık% 15'ini emiyor. Yani bu, diski uyandıran basit koddan kurtuldum, CPU'yu saatlerce boşa harcayan kod yazmak için ve niyetim ilk etapta güç tasarrufu yapmaktı.xprop -spyodağı her değiştirdiğimde (geçici olarak çözdüğüm$_line) veya pencereleri oluşturup yok ettiğimde beni bilgilendirir . Bu, diski xdotool'den daha sık uyandırır.
Ben sadece başlık $stringgörünmesini veya kaybolması ile pencere için bekleyen basit bir program arıyorum . Mevcut bir komut satırı aracı, bir python betiği, derlenebilir C kodu olabilir ..., ama bir şekilde benim betime (sadece bir fifo için bazı bilgiler yazsa bile) entegre edebilmeliyim!
fatraceDisk uyanmalarını kontrol etmek için kullanıyorum ve bana bashokumaları /bin/sleepve /usr/bin/wmctrlher yarım saniyede bir, bu yüzden aslında pencere olaylarını bekleyecek bir program arıyorum. Bir şey mi kaçırıyorum?
btracegelen blktraceDisk etkinlik kaynaklarını araştırmak.
xwininfowmctrl daha kesinlikle yükleri çok daha az sayıda paylaşılan kütüphaneleri, kullanım olabilir ve daha yakın çıplak X bir seviyede çalışır
strace -f -e trace=file wmctrl -lbilgilendirici olmalı.