Xlib 是否有任何库调用 Window 关联的进程 ID?

does Xlib have any library call for Window associated process ID?

目标:收集Tracking app中用户交互程序的信息。

最有效的方法是通过流程 ID。我能想到的唯一方法是获取 Xlib Window 关联进程 ID 还有其他方法吗?

查看文档和源代码,没有找到 Window 关联进程 ID 属性的线索,也许 Xlib 没有保留 PID或者是吗?

非有效的解决方案是通过 Window name 属性。

X 服务器没有该信息。事实上,甚至可能没有可用的 PID -- 客户端可以通过网络连接到 X 服务器。

如果您需要做的只是确定正在使用的程序,您可以查看 WM_CLASS window 属性。 属性 包含一对字符串,用于向 window 管理器标识 window,并且通常包括应用程序的名称。

Xlib 不保留进程 ID - 它被设计用于具有不同进程抽象的各种 OS,并且跨网络工作,其中一台机器上的 pid 在另一台机器上不是很有用另一台机器。

但是由于当今大多数 X 应用程序都在 运行 类 Unix 机器上并在本地显示,而不是通过网络显示,因此许多现代工具包采用了将进程 ID 存储在 属性 中的约定在该应用程序的 window 上。有关详细信息,请参阅 _NET_WM_PID section of the Extended Window Manager Hints 规范。