如何从pid获取xid(反之亦然)?

时间:2011-04-04 17:07:37

标签: linux pid x11

如何从xid(X窗口标识符)获取pid?如何获取给定pid的xid列表?

(假设所有应用程序都使用DISPLAY=:0运行,而不使用网络透明度)

我期待的是:

  1. 挖掘/ proc / $ pid / fd /以跟踪与X服务器的连接
  2. 关注此连接,深入了解/proc/`pidof X`/fd
  3. 在X内挖掘,因为它应该知道如何将连接映射到窗口。

3 个答案:

答案 0 :(得分:4)

您可以使用xprop -id <windowid> _NET_WM_PID来获取相关窗口的PID属性。您应该知道窗口的窗口ID,而不是所有应用程序都设置_NET_WM_PID原子。

答案 1 :(得分:1)

这适用于我的目的:

=^_^= izkata@Izein:~$ XID=0x340001c
=^_^= izkata@Izein:~$ printf "%d\n" $XID               # Convert from hex to decimal
54525980
=^_^= izkata@Izein:~$ xdotool getwindowpid 54526066
20639
=^_^= izkata@Izein:~$ ps 20639
  PID TTY      STAT   TIME COMMAND
20639 ?        Ssl  116:25 /usr/lib/firefox/firefox

答案 2 :(得分:1)

wmctrl 列出窗口、它们的 xid 和可选的进程的 pid。因此,假设您的 $pid 只有一个窗口,您可以使用

获得相应的 xid
wmctrl -ulp | tr -s ' ' | cut -d" " -f1,3 | grep $pid | cut -d" " -f1

相反,假设 xid 是六进制,获取 pid

wmctrl -ulp | tr -s ' ' | cut -d" " -f1,3 | grep $xid | cut -d" " -f2

.