ฉันจะฆ่าหน้าจอทั้งหมดได้อย่างไร


74

ฉันสร้างหน้าจอมากกว่า 1,000 หน้าโดยไม่ตั้งใจ ฉันจะฆ่าพวกเขาทั้งหมดด้วยคำสั่งเดียวได้อย่างไร (หรือไม่กี่)


3
ทำงาน ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw

ความคิดที่ดี @ sactiw ฉันแก้ไขมันเพื่อทำงานกับเซสชันที่มีชื่อของฉันและปรับแต่งคำสั่งเล็กน้อยเพื่อทำความสะอาดเซสชันโดยสมบูรณ์ในกรณีที่พวกเขา 'ติด' เหมือนพวกเขาสำหรับฉันและรายการอีกครั้งสำหรับผู้ใช้เป็นสติตรวจสุขภาพ:screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Pysis

3
คุณสร้างหน้าจอ 1,000 รายการโดยไม่ตั้งใจอย่างไร
duhaime

คำตอบ:


94

คุณสามารถใช้ได้ :

pkill screen

หรือ

killall screen

ใน OSX กระบวนการนี้เรียกว่า SCREEN ในตัวพิมพ์ใหญ่ทั้งหมด ดังนั้นใช้:

pkill SCREEN

หรือ

killall SCREEN

2
ไม่แนะนำให้ใช้ SIGKILL ในกรณีนี้ SIGTERM เป็นตัวเลือกที่ดีกว่ามาก
Marco

สวัสดีราหุลพาติล ทำไมหน้าจอไม่ปรากฏในTop
user15964

ถ้าฉันไม่มีสิทธิ์ล่ะ ฉันต้องเข้าไปด้วยตนเองและออกจากหน้าจอทั้งหมดทีละรายการหรือไม่?
hipoglucido



5

เพิ่งเริ่มที่จะทำความคุ้นเคยกับ awk ฉันได้รวบรวมสิ่งนี้และมันทำหน้าที่ตามวัตถุประสงค์ ฉันโพสต์ไว้เพราะมันค่อนข้างเข้าใจง่าย

screen -ls | grep '(Detached)' | awk 'sys {screen -S $1 -X quit}'

ไหนscreen -lsจะแสดงรายการหน้าจอทั้งหมดในปัจจุบัน grep 'pattern'กรองแถวที่ตรงกันทั้งหมดออก จากนั้นเราจะสามารถได้รับการจัดการสำหรับหน้าจอแฝดและด้วยawk sys {command}เราสามารถคัดลอกและวางร่วมกันคำสั่งและดำเนินการด้วยsys, $1หมายถึงอาร์กิวเมนต์แรกหยิบขึ้นมาโดย awk screen -X quitในที่สุดเรารันคำสั่งเลิกกับ


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit ทำงานได้ดีขึ้นสำหรับฉัน
whereisalext

2

ฉันสับสนเล็กน้อยกับวิธีที่คุณจัดการเพื่อสร้างหน้าจอ 1,000 "หน้าจอ" คุณอาจหมายถึงหน้าจอ 1,000 หน้าต่าง (หน้าจอเทอร์มินัล 1000 บานในเซสชันหน้าจอเดียว)

หากคุณหมายถึง 1,000 windows ภายในเซสชันหน้าจอเดียวทางออกที่สวยงามกว่านั้นก็คือการออกจากหน้าจอโดยใช้คำสั่งC-a \(ctrl-a ตามด้วย \)


1
ลองเรียกใช้งานหน้าจอ 1,000x ภายในหน้าจอ เกิดอะไรขึ้น? คุณได้รับ 1,000 หน้าจอ windows ใช่ถูกต้องแล้วหน้าจออย่างชาญฉลาดและมีเมตตาไม่ได้ทำให้เกิดเซสชัน 1,000 หน้าจอ ดังนั้นถ้า OP ได้เริ่มต้นหน้าจอแล้วมันควรจะง่ายกว่าที่จะเริ่มต้น 1,000 หน้าจอโดยไม่ตั้งใจ
Railgun2 2

แปลก แต่ความคิดเห็นที่ฉันตอบกลับไปดูเหมือนว่าจะหายไป อย่างไรก็ตามฉันปล่อยให้ความคิดเห็นข้างต้นหมายถึงการบันทึก
Railgun2 2

1
จริง ๆ แล้วมันค่อนข้างง่าย เพียงแค่สร้างวงวนไม่สิ้นสุด (โดยไม่ตั้งใจ) แล้วใส่อะไรทำนองนี้screen -m sleep 100000ลงไป สิ่งนี้เกิดขึ้นและฉันไม่ได้สังเกตจนกว่าจะมีการสร้างหน้าจอมากกว่า 1,000 ครั้ง
BrainStone

0

คำสั่งต่อไปนี้จะยุติหน้าจอที่ไม่ได้ใช้งานทั้งหมด:

perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'

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