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
尝试xrestop
或xrestop -b
。
它旨在测量每个 X 窗口消耗多少 X 资源,但作为一个小奖励,可以识别窗口的名称和相应的 PID。
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
虽然得到了我的投票。
归档时间: |
|
查看次数: |
3226 次 |
最近记录: |