我经常通过 VNC 连接到运行许多并发计算密集型 matlab 进程的服务器。有时,我的某个进程出现问题,我可以从 top 看到,但我很难确定它在哪个 VNC 会话上运行,或者更具体地说,它在哪个显示器上运行。
假设我发现 PID 8536 占用大量资源,我想调查一下。因为这是一个 matlab 会话,我知道某个地方可能有一个 IDE 打开,我想在终止它之前检查一下是否发生了重要的事情。
过去,我们曾以一种有些尴尬的方式解决了这个问题,即确定从哪个 PTY 8536 启动,然后查看进程树以找出在该上下文中启动的内容,向上滚动并查看 VNC 初始化。
似乎一定有更好的方法来实现 PID -> X 显示(或 VNC 会话)。
答案1
在进程文件系统中有一个名为 environ 的文件,它应该包含为任何给定 PID 设置的环境变量,包括变量 VNCDESKTOP,它应该包含该进程父 VNC 会话的屏幕号。
这应该显示如下信息:
awk -v 'RS=\0' -F = '$1=="VNCDESKTOP" {print $2}' /proc/$PID/environ