ฉันสร้างหน้าจอมากกว่า 1,000 หน้าโดยไม่ตั้งใจ ฉันจะฆ่าพวกเขาทั้งหมดด้วยคำสั่งเดียวได้อย่างไร (หรือไม่กี่)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
ฉันสร้างหน้าจอมากกว่า 1,000 หน้าโดยไม่ตั้งใจ ฉันจะฆ่าพวกเขาทั้งหมดด้วยคำสั่งเดียวได้อย่างไร (หรือไม่กี่)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
คำตอบ:
คุณสามารถใช้ได้ :
pkill screen
หรือ
killall screen
ใน OSX กระบวนการนี้เรียกว่า SCREEN ในตัวพิมพ์ใหญ่ทั้งหมด ดังนั้นใช้:
pkill SCREEN
หรือ
killall SCREEN
Top
หากหน้าจอตายให้ใช้:
screen -wipe
str=$(screen -ls)
array=$(echo $str|tr "." "\n")
for V in $array
do
if [ $V -gt 0 ]
then screen -S $V -X quit
fi
done
เพิ่งเริ่มที่จะทำความคุ้นเคยกับ 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
ในที่สุดเรารันคำสั่งเลิกกับ
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
ทำงานได้ดีขึ้นสำหรับฉัน
ฉันสับสนเล็กน้อยกับวิธีที่คุณจัดการเพื่อสร้างหน้าจอ 1,000 "หน้าจอ" คุณอาจหมายถึงหน้าจอ 1,000 หน้าต่าง (หน้าจอเทอร์มินัล 1000 บานในเซสชันหน้าจอเดียว)
หากคุณหมายถึง 1,000 windows ภายในเซสชันหน้าจอเดียวทางออกที่สวยงามกว่านั้นก็คือการออกจากหน้าจอโดยใช้คำสั่งC-a \
(ctrl-a ตามด้วย \)
screen -m sleep 100000
ลงไป สิ่งนี้เกิดขึ้นและฉันไม่ได้สังเกตจนกว่าจะมีการสร้างหน้าจอมากกว่า 1,000 ครั้ง
คำสั่งต่อไปนี้จะยุติหน้าจอที่ไม่ได้ใช้งานทั้งหมด:
perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill