是否有任何bash工具/ warper可以判断特定进程创建了哪个x窗口?
答案 0 :(得分:3)
如上所述,您可以使用wmctrl
或xprop
等命令行工具。表现良好的客户端应将_NET_WM_PID
属性设置为创建主窗口的进程的pid(所有流行的工具包都会为您执行此操作)。请注意,某些客户端未设置它或可能位于另一台物理计算机上(您可以使用WM_CLIENT_MACHINE
属性) - 因此请将此信息用作提示,并且不要依赖它存在或准确。请参阅emwh spec at freedesktop以供参考。
答案 1 :(得分:2)
wmctrl -lp
给我窗口及其PID。样本输出:
0x04c00022 0 2168 ciro ciro.santilli - Skype™
0x03c00014 0 2154 ciro Krusader
0x03200022 0 2181 ciro Guake!
...
答案 2 :(得分:2)
Here是几个X11窗口管理解决方案(包括此问题之一)。
要通过进程ID获取窗口的ID,请按以下方式使用wmctrl:
#!/usr/bin/env bash
# getwindidbypid
#
# Get the ID of a window by PID (if the process has a window).
#
# Usage:
# getwindidbypid <PID>
#
while IFS= read line; do
if [[ "${line}" =~ (0x)([0-9a-z]+)([ ][- ][0-9]+[ ])([0-9]*) ]]; then
winId="${BASH_REMATCH[1]}${BASH_REMATCH[2]}"
pid="${BASH_REMATCH[4]}"
if [[ "${pid}" -eq "${1}" ]]; then
WIND_IDS+=("${winId}")
fi
fi
done < <(wmctrl -lp)
if [ "${#WIND_IDS[@]}" -gt 0 ]; then
echo "${WIND_IDS[0]}"
fi
示例:
user ~ $ getwindidbypid 37248
0x05a00012