我怎样才能列出 Linux 进程(如ps aux
),但只列出那些具有 X11 窗口的进程?
我猜想进程和 X 服务器之间一定存在某种简单的连接(就像 Linux 中始终存在的那样)。它暴露给 吗lsof
?
答案1
xwininfo -tree -root | grep -v "没有名字" | grep -v child它的方法与您所要求的略有不同:它不是列出进程,而是列出窗口。如果您要查找进程 ID 号列表,则此方法无法完成任务。如果您要查找正在运行的进程列表,则此方法可以完成任务。
显然,这种方法不会显示任何名称中包含“child”的程序的名称。不过,如果您正在寻找一种可以满足大多数用途的快速简便的选项,那么这可能是一个。
哦,顺便说一下,还有很多其他的“xwininfo” 选项,例如能够仅指定一个窗口的名称(而不是指定“根”窗口)。
答案2
我不太明白你的意思。你最有可能想要使用的命令是
ps alx | grep pts
您将需要long
标志来ps
显示第十一列,该列标识进程的终端(如果有)。
但是,您也可以以不同的格式查看相同的信息,通过pstree
...
pstree 将正在运行的进程显示为一棵树。树的根是 pid 或 init(如果省略 pid)。
通过这个,你可以搜索桌面管理器(在我的情况下是 kdm),然后从中查看所有进程下降从这里开始,包括你自己开始的那些,比如 ssh 连接。如果你使用标志-p
,你将得到进程号,
├─konsole(2716)─┬─bash(2739)───ssh(8328)
│ └─{konsole}(2738)
这允许您检查进程的进程号ssh
是否与 的输出相同ps alx
。但这确实不是显示,据我所知,发出命令的 tty。