Answers:
经过多次搜索和尝试后,我出现了以下命令:
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/'
输出示例是:
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)
DISPLAY
每个文件中的grep 。这些文件实际上是在运行的进程中,因此每个包含单词的文件都DISPLAY
意味着该进程正在使用它。您无法获得完整的进程名称,因为输出中的名称是基于ion创建的文件名,/proc
因此您所提供的信息不多。
稍稍修改Maythux脚本,我们还可以使用DISPLAY变量获取进程的PID。
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '[0-9]* (.*)' $file/stat; done | sed 'N;s/\n/\t/' |column -t |sort -n -k2
输出为:
DISPLAY=:0 590 (lxsession)
DISPLAY=:0 645 (unclutter)
DISPLAY=:0 705 (gvfsd)
DISPLAY=:0 710 (gvfsd-fuse)
DISPLAY=:0 727 (openbox)
DISPLAY=:0 729 (lxpolkit)
DISPLAY=:0 732 (lxpanel)
DISPLAY=:0 734 (pcmanfm)
DISPLAY=:0 772 (menu-cached)
DISPLAY=:0 781 (gvfs-udisks2-vo)
DISPLAY=:0 791 (gvfs-gphoto2-vo)
DISPLAY=:0 795 (gvfs-mtp-volume)
DISPLAY=:0 799 (gvfs-afc-volume)
DISPLAY=:0 804 (gvfs-goa-volume)
DISPLAY=:0 816 (gvfsd-trash)
DISPLAY=:0 21053 (npm)
DISPLAY=:0 21102 (sh)
DISPLAY=:0 21103 (sh)
DISPLAY=:0 21104 (node)
DISPLAY=:0 21110 (electron)
DISPLAY=:0 21112 (electron)
DISPLAY=:0 21149 (electron)
DISPLAY=:0 21154 (electron)
DISPLAY=:0 21180 (rec)
多数民众赞成在一些漂亮的命令行脚本!我要在那个脚本上复制一个副本,以防万一我不得不破解它以找出其他东西。
理想情况下,登录后与您在本地计算机上执行的程序相对应的所有当前进程,都将具有与第一个打开的pts(伪终端会话)控制台相同的显示变量。
例如,当您打开第一个终端会话(gnome-terminal)并运行who或w命令时,您会注意到一些类似这样的输出:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
或某些人可能看起来像这样(但您的情况并非如此)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
如果在shell的登录后执行中将DISPLAY变量设置为不同(例如:0.0),则使用灯光显示管理器,则DISPLAY的环境变量将产生与第一个打开的pts的登录后显示变量相同的显示变量(: 0.0),但登录时的主机变量仍为(:0)。
通过回显DISPLAY变量,或运行管道传递给less,如下所示:
:~$ echo $DISPLAY
要么
:~$ set | less
您还可以检查会话的当前显示变量,并查看将其设置为shell登录后执行的方式。因此,基本上,您执行的进程的显示变量将具有与登录后首次打开的pt相同的显示变量。
您发布的脚本的输出表明您的第一个打开的点将具有与显示管理器的登录名相同的显示变量,在这种情况下为:0。
现在,对于第二个示例,输出将如下所示:
DISPLAY=:0.0 (gvfs-udisks2-vo)
DISPLAY=:0.0 (zeitgeist-daemo)
DISPLAY=:0.0 (zeitgeist-fts)
DISPLAY=:0.0 (zeitgeist-datah)
DISPLAY=:0.0 (gvfs-mtp-volume)
DISPLAY=:0.0 (gvfs-gphoto2-vo)
DISPLAY=:0.0 (gvfs-afc-volume)
DISPLAY=:0.0 (geyes_applet2)
DISPLAY=:0.0 (indicator-apple)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (python)
DISPLAY=:0.0 (gvfsd-trash)
DISPLAY=:0.0 (indicator-keybo)
DISPLAY=:0.0 (gvfsd-burn)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (gnome-terminal)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (sed)
另外,还可以阅读ptmx的手册页进行其他阅读
$ man ptmx
这可能使您对伪终端的主从关系有所了解。
我希望这有帮助!
您还从哪里获得该脚本的?