Cách chính xác để giết một vncsession trong linux là gì?


25

Khi tôi chạy lệnh sau trong linuxhộp từ xa mà tôi kết nối từ windows 7máy tính xách tay của mình thông qua VNCtôi nhận được như sau:

 [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

Làm thế nào tôi có thể giết phiên này một cách thanh lịch? Tôi biết kill -9 <pid>sẽ làm điều đó nhưng tôi nghĩ rằng đó là một sạch mạnh mẽ và có thể dẫn đến các tập tin bị hỏng.

PS: Tôi cũng đọc từ nguồn này để sử dụng tùy chọn kill từ vncserver nhưng không chắc chắn làm thế nào để tìm ra display #.

Câu trả lời:


30

Như bạn nhận thấy, từ 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.

Số hiển thị được kết nối với số cổng của màn hình nếu một người không đặt thủ công (và khác), trong đó

Display number = (Port number) ‒ 5900

ví dụ cổng 5901 → hiển thị: 1. Thông tin này có thể được tìm thấy trong man Xvnc( vncserverchỉ là một tập lệnh bao bọc gọi công cụ này) trong đó có ghi:

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

Nếu bạn không biết số bằng trái tim (nhưng bạn cần biết nếu bạn sẽ kết nối với máy chủ bằng mọi cách), bạn có thể kiểm tra ví dụ ps ax | grep vncđể biết thông tin. Nếu tôi làm điều đó tại địa phương, tôi thấy các quy trình

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

và do đó tôi biết rằng chúng đại diện cho các máy chủ VNC với số hiển thị :1:2tương ứng, và có thể bị giết bởi

vncserver -kill :1
vncserver -kill :2

Trong trường hợp của bạn, bạn thấy rằng số hiển thị là :1dành cho máy chủ được liệt kê trong psđầu ra của bạn .


1

Tôi đã thử câu trả lời ở trên và nó không hiệu quả với tôi. Nó đã cho tôi một thông báo lỗi như trong câu hỏi này: Giết quá trình VNC bằng tay

Vì vậy, tôi đã phải giết chúng bằng tay. Tôi đã thử kill -9, và sau đó tôi không thể đăng nhập bằng ndp nữa. Tôi đã nhận được xrdp_mm_process_login_response: login failedkhi tôi cố gắng đăng nhập.

Câu trả lời đã được tìm thấy ở đây: http://linuxtoolkit.blogspot.com/2013/03/xrdpmm Processloginresponse-log-fails.html

Về cơ bản, có một tệp phiên không được dọn sạch khi máy chủ Xvnc bị giết. Tệp được đặt tên cho màn hình, vì vậy nếu bạn đang hiển thị: 12, thì đó là /tmp/.X11-unix/X12. Xóa tệp đó sau kill -9và bạn quay lại công việc.


Tập lệnh tôi đã viết để tự động tiêu diệt các phiên nhàn rỗi: gist.github.com/mnebuerquo/e825530cf2bfd363b6c3cd82fe697d94
Mnebuerquo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.