我使用的是 Red Hat 虚拟机,只能远程访问。但是,当我使用该top
命令时,显示的占用内存最多的进程之一是 firefox,位于/usr/lib64/firefox-3.0.18/firefox
.
这样的进程如何在没有显示的情况下启动,并且可以被某些进程实际使用?有没有办法检查哪些进程正在使用它?
答案1
Firefox 需要 X 显示。这不一定是运行它的计算机上的物理显示器:它可以是远程或虚拟显示器。
如果你想知道它在哪里显示,请查看DISPLAY
Firefox 进程中的环境变量。请注意,您需要成为 root 用户(或者更准确地说,拥有运行 firefox 进程的用户的权限)。
</proc/$pid/environ grep -z '^DISPLAY='
如果值的形式为:NUMBER
(以冒号开头),则 X 服务器是本地的。将有一个名为 的套接字/tmp/.X11-unix/XNUMBER
,例如/tmp/.X11-unix/X42
for DISPLAY=:42
。如果显示的形式为:NUMBER1.NUMBER2
,则忽略该.NUMBER2
部分。然后运行lsof /tmp/.X11-unix/X42
;打开该套接字的进程之一是 X 服务器。它可能是一个虚拟帧缓冲区 X 服务器,例如Xvfb,或者它可以是远程显示框架的服务器,例如虚拟网络控制器或者NX。
如果该值的形式为host:NUMBER
,则 X 显示是远程的。 X 服务器是一个监听端口 6000+NUMBER 的进程。运行netstat -plnt | awk '$4 ~ ":" (6000 + NUMBER) "$"' {print $7}
以显示正在侦听该端口的进程的 PID。它可能是一个 ssh 连接。
答案2
由于X11是一个Window系统,允许使用的应用程序服务器与所使用的X服务器不同,因此没有必要在本地安装显示器。
最好的办法是检查哪个是正在运行的 Firefox 的父级,即检查输出中父级的 PID
ps
(您可能还必须查看其父级......)。顺便说一句:如果您有安装的命令ptree
,这会很有帮助。另一个指示是进程正在使用的用户 ID。