ภายในเชลล์สคริปต์ฉันต้องรอหน้าต่างที่มีสตริงชื่อปรากฏขึ้นทำการกระทำบางอย่างแล้วรอให้มันหายไปและดำเนินการอื่น ๆ
เมื่อวานนี้ฉันมีรหัสง่ายๆนี้ ปัญหาคือมันไม่สามารถใส่ดิสก์ในสถานะประหยัดพลังงานในขณะที่สคริปต์ยังคงทำงานและอาจใช้เวลาหลายชั่วโมง:
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
ปรากฏหรือหายไป มันอาจเป็นเครื่องมือบรรทัดคำสั่งที่มีอยู่สคริปต์ไพ ธ อนรหัส C ที่คอมไพล์ได้ ... แต่ฉันควรจะรวมมันเข้ากับสคริปต์ของฉัน (แม้ว่าจะเพิ่งเขียนข้อมูลบางอย่างไปยังฟีฟ่า)!
fatrace
เพื่อตรวจสอบการปลุกดิสก์และมันบอกให้ฉันbash
อ่าน/bin/sleep
และ/usr/bin/wmctrl
ทุก ๆ ครึ่งวินาทีนั่นเป็นเหตุผลที่ฉันกำลังมองหาโปรแกรมบางโปรแกรมที่จะรอเหตุการณ์หน้าต่างจริง ๆ ฉันพลาดอะไรไปรึเปล่า?
btrace
จากblktrace
เพื่อตรวจสอบแหล่งที่มาของกิจกรรมของดิสก์
xwininfo
อาจมีการใช้งานแน่นอนมันจะโหลดไลบรารีที่แชร์น้อยกว่า wmctrl อย่างแน่นอนและทำงานในระดับที่ใกล้กว่ากับ X.
strace -f -e trace=file wmctrl -l
ควรให้ข้อมูล