列出所有Windows的运行命令

列出所有Windows的运行命令

您可以使用以下命令列出每个寡妇的进程 ID:

wmctrl -lp

是否存在显示每个窗口的命令running command(有点像 htop 有一个“命令”列)?

如果没有,您如何组合命令来最终实现这一目标?

答案1

wmctrl -lp如果找到的话,这会将输出中的 pid 替换为相应的命令:

wmctrl -lp | awk '{ pid=$3; cmd="ps -o comm= " pid; while ((cmd | getline command) > 0) { sub(" " pid " ", " " command " ") }; close(cmd) } 1'

这显然不适用于显示远程进程的窗口;在某些情况下,它还会为与沙盒进程相对应的窗口提供奇怪的结果(例如扁平包装)。

AWK脚本读取每一行,提取pid,运行ps -o comm=确定对应的命令;如果找到,它将用命令替换相应的 pid 字符串。

答案2

哇,今天学到了wmctrl

嗯,这已经非常接近了!只需获取这些 PID,然后检查它们的命令:

for pid in $(wmctrl -lp | tr -s " "| cut -d ' ' -f3); do
#^--|------|--------------|-----------|------------- for .. in .. loop
#   |      |              |           |              
#   \------|--------------|-----------|------------- name of the variable we'll set
#          |              |           |              each iteration
#          |              |           |              
#          \--------------|-----------|------------- $(command): replaces $(..) 
#                         |           |              with output of `command`
#                         |           |              
#                         \-----------|------------- translate character " " by -s:
#                                     |               "squeeze" multiple consecutive 
#                                     |               spaces into one
#                                     |               
#                                     \-------------- cut at ' ', take the 3rd field
  cat "/proc/${pid}/cmdline"
  echo ""
done

也很有趣,也许:

for wm_id in $(wmctrl -l | cut -d ' ' -f1); do
  xprop -id "${wm_id}" WM_CLASS
done

相关内容