giết một màn hình (nhưng không phải tất cả các màn hình)


19

Tôi có nhiều màn hình đang chạy trên máy chủ Ubuntu được khởi tạo là:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

Và tôi cần phải giết một màn hình, nhưng không phải tất cả chúng. Lệnh chính xác để giết một màn hình cụ thể với tên của nó là gì? Tôi đã đọc qua các trang người đàn ông nhưng dường như tôi không thể tìm thấy lệnh tôi đang tìm kiếm.

Ngoài ra tôi muốn viết lệnh này thành một tập lệnh bash để tôi không thể đơn giản screen -r screen1sau đó nhấn Ctrl+ Xnhư bình thường.


Xin lỗi, nghĩ rằng đây là về Donkey Kong trong một giây
Chopper3

Tôi yêu chiếc áo phông này ohgizmo.com/wp-content/uploads/2008/11/ trên
Chopper3

Đó là một tee hay, hầu hết mọi người sẽ không hiểu, trừ khi họ đã xem "The King of Kong": imdb.com/title/tt0923752
BassKozz

Từ đúng cho một đối tượng của cụm từ là "thee".
Tạm dừng cho đến khi có thông báo mới.

3
Bạn đã nói "hãy lấy nó" ở đây và "Cảm ơn" bên dưới. Nó phải là "lấy nó [cho] ngươi" và "Cảm ơn [là] ngươi".
Tạm dừng cho đến khi có thông báo mới.

Câu trả lời:


19

Từ trang người đàn ông:

   -X   Send the specified command to a running screen  session.  You  can
        use  the  -d or -r option to tell screen to look only for attached
        or detached screen sessions. Note that this command  doesn't  work
        if the session is password protected.

Bạn có thể làm :

        screen -X -S <sessionid> kill

HOÀN HẢO!!! Cảm ơn defraagh, musta đã bỏ lỡ điều đó trong người đàn ông.
BassKozz

Những điều cần biết :-)
ℝaphink

9

Nếu bạn làm một screen -list, bạn sẽ nhận thấy rằng mỗi tên màn hình bắt đầu bằng một số, đó là PID của màn hình:

 $ screen -list
There are screens on:
        12281.pts-1.jonah       (12/21/2009 07:53:19 PM)        (Attached)
        10455.pts-1.jonah       (12/19/2009 10:55:25 AM)        (Detached)
2 Sockets in /var/run/screen/S-raphink.

Từ đó, chỉ cần gửi tín hiệu KILL đến PID cụ thể này:

$ kill 12281

và nó sẽ giết màn hình cụ thể.


điều này sẽ không hoạt động bởi vì tôi đang chạy nó từ một tập lệnh bash, và tôi không phải rút PID khỏi danh sách màn hình khớp với màn hình chính xác ... câu trả lời của defraagh ở trên hoạt động như một cơ duyên. Cảm ơn bạn
BassKozz

Ok, tốt là defraagh đã có một giải pháp hoàn hảo cho nó.
ℝaphink

1

Giải pháp của defraagh không hiệu quả với tôi, tuy nhiên tôi có thể giết phiên màn hình bằng ý tưởng của Raphink:

danh sách màn hình lấy ID tiến trình

giết -9 PROCESSID

màn hình SESSIONID


1

Nếu bạn có một vài màn hình có cùng tên, bạn có thể giết chúng cùng một lúc:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • Lệnh screen -lsin màn hình với số quá trình của họ. Ví dụ: 4773.test là một màn hình có số tiến trình 4773kiểm tra tên . Đầu ra mẫu:

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • Bộ egreplọc lệnh trên văn bản mẫu được gửi qua đường ống | .

  • Lệnh awk -F "." '{print $1}'trích xuất cột đầu tiên của mỗi dòng. Dấu phân cách giữa các cột được xác định là dấu chấm (.) Theo tùy chọn -F
  • Cuối cùng, lệnh xargs killsẽ giết tất cả quá trình có số được gửi qua đường ống |. xargsđược sử dụng khi chúng ta muốn thực thi một lệnh trên mỗi đầu vào.

0

Bạn mở một cửa sổ mới với

Ctrl A + C

Bạn đóng một cửa sổ với

Ctrl + D

hoặc thoát lệnh trong cửa sổ


0

Ive đã xử lý vấn đề này như sau:

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

Giải thích là bạn lấy đầu ra screen -lsvà tìm màn hình cụ thể mà bạn quan tâm bằng cách sử dụng grep sau đó gán chuỗi đó cho biến process.

Vì đầu ra từ screen -lsluôn là PID theo sau là một khoảng thời gian sau đó bạn có thể sử dụng cắt để loại bỏ khoảng thời gian và mọi thứ sau nó. trong ví dụ trên, chúng tôi đặt nó trong ngoặc đơn và đưa nó vào lệnh kill mặc dù bạn có thể thực hiện nó một cách tuyến tính, có thể bao gồm ghi vào tệp tạm thời và đọc ra từ đó.

Bạn cần đảm bảo rằng tên màn hình của bạn là duy nhất và grep CHỈ trả về tên của màn hình bạn muốn giết.

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.