根据 PID 确定给定终端仿真器窗口的桌面或窗口 ID

根据 PID 确定给定终端仿真器窗口的桌面或窗口 ID

我想知道给定进程在哪个桌面中运行。我可以使用 从窗口 ID 获取此信息wmctrl。我还可以通过追溯父系到终端进程来找出给定进程在哪个终端仿真器进程中运行。

但是,给定的终端进程将有多个窗口分布在多个桌面上。

roxterm最近我使用终端模拟器,尽管 Konsole 和 gnome-terminal 在这方面与它类似。

有没有办法查询这些应用中的一个或多个,以找出给定进程在哪个窗口中运行?如果需要gdb黑客技术,那就黑客技术吧。不过,更新后可能继续工作的东西可能会更好 :)

我并不完全反对在 bash 初始化时跟踪这些内容,但我不愿意理清所有的细节,而且似乎有一些重要的边缘情况不适合这种方法。不过也许有人已经解决了这个问题?

或者,如果有另一个终端仿真器提供了更丰富的界面来访问此类内省数据,那就太好了。

我可以通过在单独的进程中运行每个窗口来解决这个问题,但在内存使用和多功能性方面的妥协(例如将选项卡从一个窗口移动到另一个窗口)可能是不可接受的。主要是内存使用。

答案1

许多终端仿真器(包括 rxvt、xterm、gnome-terminal 和 konsole;我还没有用 roxterm 测试过)将环境变量设置WINDOWID为启动子进程(例如 shell)的窗口的 id。因此在 Linux 上,

</proc/$pid/environ tr \\0 \\n | sed -n 's/^WINDOWID=//p'

告诉您$pid正在哪个窗口运行。

如果进程在窗口之间迁移,则此方法将不起作用,例如,如果它在屏幕下运行,或者您在窗口之间迁移了选项卡。

相关内容