如何知道哪些进程设置了 DISPLAY 变量?

May*_*hux 10 command-line environment-variables

有时我会在显示中遇到一些问题,主要是我想知道哪些文件或进程正在使用 DISPLAY 环境变量。

那么如何列出所有设置了 DISPLAY 的进程呢?

May*_*hux 15

经过多次搜索和尝试,我想到了这个命令:

for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '(.*)' $file/stat; done | sed 'N;s/\n/\t/'
Run Code Online (Sandbox Code Playgroud)

输出示例是:

DISPLAY=:0  (unity-files-dae)
DISPLAY=:0  (unity-music-dae)
DISPLAY=:0  (unity-lens-vide)
DISPLAY=:0  (zeitgeist-daemo)
DISPLAY=:0  (zeitgeist-fts)
DISPLAY=:0  (zeitgeist-datah)
DISPLAY=:0  (cat)
DISPLAY=:0  (unity-scope-vid)
DISPLAY=:0  (unity-musicstor)
DISPLAY=:0  (dconf-service)
DISPLAY=:0  (gdu-notificatio)
DISPLAY=:0  (telepathy-indic)
DISPLAY=:0  (mission-control)
DISPLAY=:0  (goa-daemon)
DISPLAY=:0  (VBoxXPCOMIPCD)
Run Code Online (Sandbox Code Playgroud)

为了解释发生了什么,这个循环在每个文件中/proc搜索的目录中递归搜索DISPLAY。这些文件实际上是正在运行的进程,因此每个包含单词 DISPLAY 的文件都表示该进程正在使用它。