当我在通过笔记本电脑linux
连接的远程盒中运行以下命令时,我得到以下结果:windows 7
VNC
[subhrcho@slc04lyo ~]$ ps -ef|grep vnc
subhrcho 20113 19804 0 21:40 pts/8 00:00:00 grep vnc
subhrcho 27486 1 0 Jan28 ? 00:05:35 Xvnc :1 -desktop slc04lyo:1 (subhrcho) -httpd /usr/share/vnc/classes -auth /home/subhrcho/.Xauthority -geometry 1680x1050 -depth 16 -rfbwait 30000 -rfbauth /home/subhrcho/.vnc/passwd -rfbport 5901 -pn
subhrcho 27493 1 0 Jan28 ? 00:00:00 vncconfig -iconic
我该如何优雅地终止此会话?我知道kill -9 <pid>
可以这样做,但我认为这是一种强制清理,可能会导致文件损坏。
PS:我也读过来自这个来源使用 vncserver 的 kill 选项,但不确定如何找出显示编号。
答案1
正如您所注意到的,来自man vncserver
:
-kill :display#
This kills a VNC desktop previously started with vncserver. It does
this by killing the Xvnc process, whose process ID is stored in the
file "$HOME/.vnc/host:display#.pid". It actually ignores anything
preceding a ":" in its argument. This can be useful so you can write
"vncserver -kill $DISPLAY", for example at the end of your xstartup
file after a particular application exits.
如果没有手动设置(不同方式),则显示器编号与显示器的端口号相关,其中
Display number = (Port number) ‒ 5900
man Xvnc
例如端口 5901 → 显示:1。此信息可以在(vncserver
只是调用此工具的包装脚本)中找到,其中显示:
-rfbport port
Specifies the TCP port on which Xvnc listens for connections from
viewers (the protocol used in VNC is called RFB - "remote
framebuffer"). The default is 5900 plus the display number.
如果你记不住这个数字(但无论如何如果你要连接到服务器,你就需要知道这个数字),你可以查看例如ps ax | grep vnc
信息。如果我在本地执行此操作,我会看到进程
25697 ? S 55:38 Xvnc4 :1 [...]
[...]
30481 ? S 17:57 Xvnc4 :2 [...]
因此我知道它们分别代表具有显示编号:1
和的VNC 服务器:2
,并且可以被杀死
vncserver -kill :1
vncserver -kill :2
在您的情况下,您会看到显示号码是:1
针对输出中列出的服务器的ps
。
答案2
我尝试了上面的答案,但对我不起作用。它给了我一条错误消息,如下问题所示: 手动终止 VNC 进程
所以我不得不手动杀死它们。我尝试了 kill -9,然后我就无法再使用 rdp 登录了。xrdp_mm_process_login_response: login failed
当我尝试登录时,我得到了这个错误。
答案在这里: http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html
基本上,Xvnc 服务器被关闭时,会有一个会话文件未被清理。该文件以显示器命名,因此如果您在显示器 :12 上,则其名称为/tmp/.X11-unix/X12
。之后删除该文件kill -9
,您就可以恢复工作了。