1

У меня есть скрипт, который управляет окнами с помощью 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 получен из уже мертвого дочернего процесса. Как мне это сделать?

0