У меня есть скрипт, который управляет окнами с помощью wmctrl
.
Это в основном работает, но есть условие гонки. Когда запускается произвольная программа, мне нужно определить ее идентификатор X-окна. Наивная версия в основном
wmctl -l | cut -d ' ' -f 1 >before
do
wmctl -l | cut -d ' ' -f 1 >after
until diff before after reveals a new line
Сценарий bash, содержащий указанную выше логику, знает PID дочернего процесса, который был запущен. Дочерний процесс разветвляется, внук создает идентификатор окна X, а потомок умирает.
У меня есть PID ребенка и X window ID окна внука кандидата. У меня нет PID каких-либо промежуточных процессов.
Я не могу синхронизировать создание окна или изменить саму дочернюю программу, поэтому, чтобы обойти условие гонки, мне нужно убедиться, что кандидатный идентификатор окна X получен из уже мертвого дочернего процесса. Как мне это сделать?