This protocol allows the Window Manager to determine if the Client is still processing X events. This can be used by the Window Manager to determine if a window which fails to close after being sent WM_DELETE_WINDOW has stopped responding, or has stalled for some other reason, such as waiting for user confirmation. A Client SHOULD indicate that it is willing to participate in this protocol by listing _NET_WM_PING in the WM_PROTOCOLS property of the client window.
A Window Manager can use this protocol at any time by sending a client message as follows:
type = ClientMessage window = the respective client window message_type = WM_PROTOCOLS format = 32 data.l[0] = _NET_WM_PING data.l[1] = timestamp
A participating Client receiving this message MUST send it back to the root window immediately, by setting window = root, and calling XSendEvent. The Client MUST NOT alter the timestamp, as this can be used by the Window Manager to uniquely identify the ping.
The Window Manager MAY kill the Client (using _NET_WM_PID) if it fails to respond to this protocol within a reasonable time.
See also the implementation notes on killing hung processes.