Как правильно убить vncsession в Linux?

25

Когда я запускаю следующую команду в своем удаленном 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: я также читал из этого источника, чтобы использовать опцию kill из vncserver, но не уверен, как выяснить display #.

Компьютерщик
источник

Ответы:

30

Как вы заметили, из 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

например, порт 5901 → дисплей: 1. Эту информацию можно найти в man Xvnc( 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 [...]

и, таким образом, я знаю, что они представляют VNC-серверы с отображаемыми номерами :1и, :2соответственно, и могут быть убиты

vncserver -kill :1
vncserver -kill :2

В вашем случае вы видите, что номер дисплея :1соответствует серверу, указанному в ваших psвыходных данных.

Даниэль Андерссон
источник
1

Я попробовал ответ выше, и он не работал для меня. Это дало мне сообщение об ошибке, как в этом вопросе: Killing VNC Process Manually

Поэтому мне пришлось убить их вручную. Я попытался убить -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и вы снова в деле.

Mnebuerquo
источник
Скрипт, который я написал для автоматического уничтожения простаивающих сессий: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo