![获取窗口后面的进程名称](https://linux22.com/image/907820/%E8%8E%B7%E5%8F%96%E7%AA%97%E5%8F%A3%E5%90%8E%E9%9D%A2%E7%9A%84%E8%BF%9B%E7%A8%8B%E5%90%8D%E7%A7%B0.png)
我正在尝试编写一个脚本来检查 Spotify 是否已关闭。我尝试了以下方法来打印打开的 Spotify 窗口的数量,但不起作用。
wmctrl -l | grep "Spotify" | wc -l
原因是当 Spotify 播放音乐时,窗口标题会更改为正在播放的歌曲的名称,并且不包含“Spotify”。
我想我可以做类似以下的事情来打印打开的 Spotify 窗口的数量:
wmctrl -l | awk '{print $1}' | xargs -I id ... | wc -l
但是我不确定我可以使用什么命令来检查运行窗口的进程的名称,给定从 wmctrl 返回的窗口 ID(格式为 0x06200001)
答案1
wmctrl -l | awk '{print $1}' | xargs -i xprop -id {} | grep WM_CLASS\(STRING\)\ =\ \"spotify\" | wc -l
我使用 xargs 在每个打开的窗口上运行xprop -id <window-id>
,对于每个 Spotify 窗口,输出xprop
都会显示(以及许多其他内容)如下一行:
WM_CLASS(STRING) = "spotify", "Spotify"
因此我将 xprop 插入到 中grep WM_CLASS(STRING) = "spotify"
,显然避开了空格、引号和括号。