从终端列出图形进程

j0h*_*j0h 7 shell bash process ps shell-script

不要将这里的问题与如何以图形方式列出进程混淆,这不是我要问的。

在终端中,如何查看哪些进程具有 GUI?就像 firefox、vlc、geany、nautilus 等一样......都有一个 gui。我想了解有关哪些进程正在使用窗口管理器资源的更多信息,我想从终端执行此操作。

我如何获得有关这些类型流程的更多信息?

我一直在尝试使用该ps命令,但我会接受任何终端命令来帮助我解决这个问题。

更新:我看到了一些我喜欢的东西,我pstree 感兴趣的所有图形过程都是从树中产生的:

$pstree
在里面???
     ?
     ??lightdm???Xorg
     ? ??lightdm???init???
     ? ? ? ??firefox???55*[{firefox}]
     ? ? ? ??geany???bash
     ? ? ? ?       
     ? ? ? ??gnome-terminal???bash???pstree


mya*_*aut 6

尝试xrestopxrestop -b

它旨在测量每个 X 窗口消耗多少 X 资源,但作为一个小奖励,可以识别窗口的名称和相应的 PID。

  • @j0h 好吧……尝试定义“拥有 GUI”的含义。最后这意味着该进程正在向操作系统的 GUI 服务器发送一些命令以显示一些窗口。X 是 linux 系统的显示服务器,因此所有带有 GUI 的进程都以某种方式“使用”X。从内核的角度来看,GUI 和非 GUI 进程之间确实没有真正的区别,因此没有简单的系统调用来确定一个进程是否有一个 GUI。 (3认同)

mr.*_*tic 6

xlsclients很接近(并且是 X 的标准部分),它列出了 X 服务器的客户端。但是,您认为的“应用程序”和 X 认为的“客户端”之间可能不存在 1:1 的映射。例如,我的单个 LyX 运行实例消耗 13 个客户端,如果我使用xlsclients -l(长格式输出),我只能看到其中一个具有定义的“图标名称”,但这只是一个提示。此外,因为它使用XQueryTree()它可能会错过一些窗口(它没有找到xpdf我打开的任何窗口)。

它也没有提供太多信息,您可以做的是使用xlsclients -l获取窗口 id,并使用xprop -id $ID. 有关窗口的更多详细信息,请使用xwinifo,尽管它关心与客户端或应用程序不同的“窗口”:

xwininfo -root -children
xwininfo -root -tree  # indented view
Run Code Online (Sandbox Code Playgroud)

根据您的窗口管理器,您可能能够检查某些窗口属性(例如_NET_xxx_NET_WM_xxxx properties)以确定某些东西是否是“应用程序”。如果窗口管理器客户端或 GUI 库设置它(任何当代人都应该设置),则该_NET_WM_PID属性是将PID 与特定窗口关联的最简单(虽然不完美)的方式。我不知道有什么工具可以将所有这些部分联系在一起。

我使用窗口管理器 FVWM,我可以使用 直接与它对话FvwmCommand,例如FvwmCommand -i1 send_windowlist向我显示窗口列表。@Arkadiusz 的使用建议wmctrl似乎是一种很好的、​​与窗口管理器无关的方式来做同样的事情。

还有一招是查询根窗口的_WIN_CLIENT_LIST,通过bash

$ xwininfo -root 
xwininfo: Window id: 0x69 (the root window) (has no name)
[..]

$ IFS=",= " read -a win < <(xprop -notype -id 0x69 32x  _WIN_CLIENT_LIST )

$ for ((ww=1; ww<${#win[*]}; ww++)); do 
    printf "%i %s\n" $ww ${win[$ww]};  
    xprop -id ${win[ww]} -notype _NET_WM_PID WM_NAME WM_CLASS \
                                 WM_ICON_NAME WM_CLIENT_LEADER; 
  done
Run Code Online (Sandbox Code Playgroud)

这与我的 WM 列为窗口的内容完全匹配(没有那些我配置为从 WM 窗口列表中排除的)。子窗口设置WM_CLIENT_LEADER为其父窗口(用于会话管理),尽管父窗口可能不可见(firefox 会这样做),并且可能指向自身。

xrestop 虽然得到了我的投票。