_NET_WM_PING
Способ оконного менеджера выяснить, не завис ли приложение, и свойство с PID, позволяющее затем убить нужный процесс.
X-сервер никогда не замечает, что программа перестала отвечать: соединение открыто, окно нарисовано, а щелчки вежливо копятся в буфере сервера. EWMH дал менеджеру проверку. Программа, указавшая _NET_WM_PING в WM_PROTOCOLS, время от времени — и всегда при нажатии кнопки закрытия — получает ClientMessage с отметкой времени и ID своего окна, который должна отправить обратно без изменений на корневое окно. Ответ приходит из цикла событий программы, так что та, что застряла в вычислении или блокирующем вызове, не отвечает, и через несколько секунд менеджер может заключить, что она зависла. Отсюда диалоги «приложение не отвечает» в Mutter и KWin. GTK и Qt отвечают на пинг внутри тулкита, прикладной программист его не видит.
Убить X-программу сложнее, чем кажется. XKillClient лишь закрывает соединение, и процесс, который его не слушает, спокойно продолжит жить без окна. Поэтому EWMH добавил на окно _NET_WM_PID, позволяющий менеджеру после пропущенного ответа отправить SIGKILL нужному процессу, предварительно сравнив WM_CLIENT_MACHINE с собственным именем хоста: PID с другой машины ничего не значит. Контейнеры и Flatpak со своими пространствами PID снова сделали этот трюк ненадёжным — урок, который учёл Wayland: там клиент отвечает на пинги внутри самого протокола, а композитор знает процесс по сокету.