ปิดเซสชันการแยกหน้าจอ [ปิด]


864

ฉันเรียนรู้จากที่ไหนสักแห่งหน้าจอเดี่ยวสามารถถูกฆ่าโดย

screen -X -S [session # you want to kill] kill

โดยที่ [เซสชัน # ที่คุณต้องการฆ่า] สามารถรับได้

screen -ls

แต่มันไม่ได้ผล มีอะไรผิดปกติ? วิธีที่ถูกต้องคืออะไร?


25
"ที่ไหนสักแห่ง" ไม่ใช่แหล่งข้อมูลที่ดีเสมอไป ลอง "หน้าจอชาย"
innaM

27
คำสั่งที่ถูกต้องคือscreen -S sessionname -p 0 -X quit
jimmetry

killall - # screen [# = จำนวนหน้าจอที่คุณต้องการฆ่า]
CArnold

ฉันใช้exit
TPArrow

CTRL + D เมื่ออยู่ในหน้าจอเป็นคำสั่งที่ง่ายที่สุด
Don King

คำตอบ:


1267

"kill" จะฆ่าหน้าต่างหน้าจอเดียวเท่านั้น จะ "ฆ่า" quitเซสชั่นที่สมบูรณ์ใช้งาน

ตัวอย่าง

$ screen -X -S [session # you want to kill] quit

สำหรับเซสชันที่ไม่ทำงานให้ใช้: $ screen -wipe


112
พิมพ์ 'exit' (โดยไม่ใส่เครื่องหมายอัญประกาศ) ใน ubuntu: P
mzalazar

16
exitใช้งานได้ แต่ต้องพิมพ์ลงในแต่ละหน้าจอที่เปิดอยู่ quitไม่ทำงานแม้กระทั่ง
kapad

4
@kapad จริงเลิกงานถ้าคุณเขียนแบบอินไลน์ -X -S pid / sockname เลิก
เอดูอาร์

20
บน OSX การเข้าสู่screen -X quitเทอร์มินัลใด ๆ จะยุติเซสชันที่ใช้งานอยู่ทั้งหมด
Michel

5
Ctrl + D ใช้ได้เช่นกัน
Yi Xin

499

คุณสามารถฆ่าเซสชันที่แยกออกซึ่งไม่ตอบสนองภายในเซสชันหน้าจอได้โดยทำดังต่อไปนี้

  1. พิมพ์screen -listเพื่อระบุเซสชันหน้าจอที่แยกออก

    ~ $ รายการหน้าจอ  
        มีหน้าจออยู่:  
             20751.Melvin_Peter_V42 (แยกออก)  
    

    หมายเหตุ: 20751.Melvin_Peter_V42คือรหัสเซสชันของคุณ

  2. เชื่อมต่อกับเซสชันหน้าจอที่แยกออก

    หน้าจอ -r 20751.Melvin_Peter_V42
  3. เมื่อเชื่อมต่อกับเซสชันกดCtrl+ Aจากนั้นพิมพ์:quit


20
คุณสามารถใช้หน้าจอ -r 20751 โดยไม่มีชื่อเต็ม
Gal Bracha

53
หรือ: Ctrl + a, k
laffuste

@laffuste ความคิดเห็นของการทำงานสำหรับฉัน แต่quitและ:quitนำไปสู่การcommand not foundบนเซิร์ฟเวอร์ลินุกซ์ของฉันระยะไกล (บางทีอาจจะเป็นความแตกต่างระหว่างรุ่นของระบบปฏิบัติการหรือหน้าจอมีการตำหนิ)
สับ-R

เมื่อติดกับหน้าจอแล้วexitก็ใช้งานได้
PankajKabra

145

หน้าจอรายการ:

screen -list

เอาท์พุท:

There is a screen on:
23536.pts-0.wdzee       (10/04/2012 08:40:45 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

ปิดเซสชันของหน้าจอ:

screen -S 23536 -X quit

1
'screen -ls' ใช้งานได้เช่นกัน ;)
Atul Vaibhav

113

ฆ่าเซสชันได้ง่ายขึ้นเมื่อได้รับชื่อที่มีความหมาย:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit

ทำไมscreen -Sไม่screen -r?
43Tesseracts

1
คำตอบนี้ใช้ชื่อของเซสชันซึ่งสะดวกกว่าการค้นหา ID ขอบคุณ!
Paul Kenjora

43

คุณสามารถไปที่สถานที่ที่เซสชันเซสชันตั้งอยู่และเรียกใช้:

 screen -ls

ซึ่งส่งผลให้

 There is a screen on:
         26727.pts-0.devxxx      (Attached)
 1 Socket in /tmp/uscreens/S-xxx. <------ this is where the session is.

และเพียงลบออก:

  1. cd / tmp / uscreens / S-xxx
  2. LS
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. LS

uscreensไดเรกทอรีจะไม่ได้มี26727.pts-0.devxxxไฟล์อยู่ในนั้นอีกต่อไป ตอนนี้เพื่อให้แน่ใจว่าเพียงแค่พิมพ์สิ่งนี้:

screen -ls

และคุณควรจะได้รับ:

ไม่พบ Sockets ใน / tmp / uscreens / S-xxx


4
นี่เป็นทางออกเดียวที่จะใช้งานได้หากหน้าจอ "ติดอยู่" เช่น ไม่ตาย แต่ไม่สามารถแนบได้
redreinard

สิ่งนี้ช่วยฉันได้เมื่อหน้าจอล็อคอย่างเต็มที่ แต่ฉันก็ต้องค้นหาและฆ่ากระบวนการจริงด้วย ps aux | grep screenพบ pid และฉันออกkillเพื่อลบ ขึ้นอยู่กับสิ่งที่คุณใช้ในหน้าจอคุณอาจมีไฟล์ temp และล็อคเพื่อล้างข้อมูล
Lomky

29
screen -wipe

ควรทำความสะอาดทุกตายประชุมหน้าจอ


11
หมายความว่าอะไรที่ตายแล้ว ไม่ได้เรียกใช้โปรแกรมใด ๆ
Shihao Xu

1
@ShihaoXu Dead หมายถึงเซสชันไม่สามารถเข้าถึงได้และบน localhost (การเชื่อมต่อซ็อกเก็ตใช้งานไม่ได้) - ดูgnu.org/software/screen/manual/screen.html
iBaff

23

เพิ่มลงในของคุณ~/.bashrc:

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit"

จากนั้นใช้cleanscreenเพื่อล้างเซสชันทั้งหมดของหน้าจอ


11
ง่ายหนึ่งซับ:screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
แอเรียล

3
ทำงานได้ดี แต่ต้องปรับเปลี่ยนเล็กน้อยเพื่อให้ทำงานบน OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Jonathan

การปรับปรุงเล็กน้อย: -screen -ls | grep Attached | ตัด -d -f1 | awk '{พิมพ์ $ 1}' | xargs -I {} screen -d {}
Abhay Yadav


16

หากต้องการฆ่าเซสชันหน้าจอเดี่ยวทั้งหมดให้รวมฟังก์ชันนี้ใน. bash_profile ของคุณ:

killd () {
for session in $(screen -ls | grep -o '[0-9]\{5\}')
do
screen -S "${session}" -X quit;
done
}

เพื่อเรียกใช้โทร killd


5
บางครั้งมันไม่ใช่ตัวเลข 5 หลักดังนั้นฉันจึงใช้: killd () {สำหรับเซสชันใน $ (หน้าจอ -ls | grep -o '[0-9] \ +') ทำหน้าจอ -S "$ {เซสชัน}" -X ออกจาก; เสร็จแล้ว)
Kostyantyn

7
== ISSUE THIS COMMAND
[xxx@devxxx ~]$ screen -ls


== SCREEN RESPONDS
There are screens on:
        23487.pts-0.devxxx      (Detached)
        26727.pts-0.devxxx      (Attached)
2 Sockets in /tmp/uscreens/S-xxx.


== NOW KILL THE ONE YOU DONT WANT
[xxx@devxxx ~]$ screen -X -S 23487.pts-0.devxxx kill


== WANT PROOF?
[xxx@devxxx ~]$ screen -ls
There is a screen on:
        26727.pts-0.devxxx      (Attached)
1 Socket in /tmp/uscreens/S-xxx.

จะไม่เพียงเอาซ็อกเก็ตไม่ฆ่ากระบวนการที่อยู่เบื้องหลังหรือไม่
Martin C.

วิธีนี้เป็นความเสี่ยงจากมุมมองของการสร้างกระบวนการ zomby หรือไม่?
Fedir RYKHTIK

5

ในขณะที่ในหน้าจอเซสชันสิ่งที่คุณต้องทำคือพิมพ์exit

นี่จะฆ่าเซสชันของเชลล์ที่หน้าจอเริ่มต้นซึ่งจะยุติเซสชันหน้าจอที่คุณเปิดอยู่

ไม่จำเป็นต้องกังวลกับ id เซสชันของหน้าจอเป็นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.