Qual è il modo corretto di uccidere una sessione virtuale in Linux?


25

Quando eseguo il comando seguente nella mia linuxcasella remota a cui mi connetto dal mio windows 7laptop tramite VNCottengo quanto segue:

 [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

Come posso uccidere questa sessione in modo elegante? So che kill -9 <pid>lo farebbe, ma penso che sia una pulizia forte e potrebbe portare a file corrotti.

PS: Ho anche letto da questa fonte per usare l'opzione kill da vncserver ma non sono sicuro di come visualizzare display #.

Risposte:


30

Come hai notato, dal 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.

Il numero del display è collegato al numero di porta del display se non è stato impostato manualmente (e diversamente), dove

Display number = (Port number) ‒ 5900

ad es. porta 5901 → display: 1. Questa informazione può essere trovata in man Xvnc( vncserverè solo uno script wrapper che chiama questo strumento) dove dice:

   -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.

Se non si conosce il numero a memoria (ma è necessario conoscerlo se si intende connettersi comunque al server), è possibile controllare ad es. ps ax | grep vncPer informazioni. Se lo faccio localmente, vedo i processi

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

e quindi so che rappresentano i server VNC con numeri di display :1e :2rispettivamente, e possono essere uccisi da

vncserver -kill :1
vncserver -kill :2

Nel tuo caso, vedi che il numero visualizzato è :1per il server elencato psnell'output.


1

Ho provato la risposta sopra e non ha funzionato per me. Mi ha dato un messaggio di errore come in questa domanda: Killing VNC Process Manualmente

Quindi ho dovuto ucciderli manualmente. Ho provato a uccidere -9, e quindi non sono più riuscito ad accedere con rdp. Ho avuto xrdp_mm_process_login_response: login failedquando ho provato ad accedere.

La risposta è stata trovata qui: http://linuxtoolkit.blogspot.com/2013/03/xrdpmmprocessloginresponse-login-failed.html

Fondamentalmente, c'è un file di sessione non ripulito quando il server Xvnc viene ucciso. Il file è chiamato per il display, quindi se sei in mostra: 12, lo è /tmp/.X11-unix/X12. Elimina quel file dopo kill -9e sei di nuovo in affari.


Script che ho scritto per uccidere automaticamente le sessioni inattive: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.