在 Lubuntu 18.04 上的终端仿真器 (lxterminal) 的选项卡中,我尝试通过单击选项卡内的同一位置(显示 shell 的位置)来找出其窗口 ID,方法是xwininfo
$ xwininfo -int | grep -Po '(?<=Window id: )[0-9a-zA-Z]+'
31457283
或xdotool
$ xdotool selectwindow
35652689
为什么要给xwininfo
我xdotool
不同的窗口 ID?
因此,不同的窗口 ID 会导致不同的进程 ID:
$ xdotool getwindowpid 31457283
1480
$ ps aux | grep -i 1480
t 1480 0.1 0.3 473204 31240 ? Sl Nov21 23:18 lxterminal
$ xdotool selectwindow getwindowpid
window 35652689 has no pid associated with it.
窗口 ID 不同的问题不仅仅发生在 lxterminal 的标签页中,还发生在 Firefox 的标签页中,或者 evince 的窗口中。我还没有发现通过点击窗口内部的方式两种方式给出相同窗口 ID 的应用程序。
答案1
这是两件不同的事情。
- 窗口 ID:由
xdotool selectwindow
和返回xwininfo -int
- 进程 ID:由
xdotool selectwindow getwindowpid
和返回xprop | grep _NET_WM_PID
(如果您有XOrg 的附加窗口属性)
进程 ID 是内核的进程标识符,用于终止进程、安排任务等。
窗口 ID 是窗口服务器的窗口标识符。一个进程可以生成任何窗口数量,而且它们经常会生成不止一个。想想 GIMP 在整个屏幕上有多少个自由浮动的对话框。
在这种情况下,进程 ID 只是混淆了问题,但如果你的目标是同一窗口比任何单个目标你应该得到相同的结果
xdotool selectwindow
xwininfo -int
在同一行上运行它们,双击并查看它们都显示的内容:
xwininfo -int | grep -Po '(?<=Window id: )[0-9a-zA-Z]+'; xdotool selectwindow;
我安装lxterminal
并确认您看到的内容是独一无二的。我无法重现。