2013-02-11 05:50:52 +0000 2013-02-11 05:50:52 +0000
25
25

在linux系统中,如何正确地杀死一个vncsession?

当我在我的远程linux盒子中运行下面的命令,通过windows 7连接到我的笔记本电脑上时,我得到了以下结果:

[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

如何才能优雅地杀死这个会话?我知道VNC可以这样做,但我认为那是强行清除,可能会导致文件损坏。

答案 (2)

30
30
30
2013-02-11 07:00:49 +0000

你也注意到了,从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

如果没有手动设置的话(也不一样),显示器的端口号是和显示器的端口号相连的,其中 -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.

例如:端口5901 → 显示器 :1。这个信息可以在man Xvnc中找到(vncserver只是一个调用这个工具的封装脚本),里面写着:

25697 ? S 55:38 Xvnc4 :1 [...]
[...]
30481 ? S 17:57 Xvnc4 :2 [...]

如果你不知道这个号码(但是如果你要连接到服务器的话,你需要知道这个号码),你可以检查一下,比如ps ax | grep vnc的信息。如果我在本地这样做,我看到了

vncserver -kill :1
vncserver -kill :2

的进程,从而知道它们分别代表VNC服务器的显示号为:1:2,可以通过 &001

来查杀。

1
1
1
2016-06-23 18:47:39 +0000

我试了一下上面的答案,但对我来说没有用。它给了我一个错误信息,就像这个问题中的 手动杀死VNC进程

所以我不得不手动杀死它们。我试着杀了-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之后删除这个文件,就可以恢复正常了。