Bagaimana cara saya membunuh semua layar?

76

Saya tidak sengaja membuat lebih dari 1000 layar. Bagaimana saya membunuh mereka semua dengan satu perintah? (Atau beberapa)

BrainStone
sumber
3
jalankan ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw
Ide bagus @sactiw. Saya memodifikasinya untuk bekerja dengan sesi bernama saya, dan mengubah sedikit perintah untuk preferensi, membersihkan sesi sepenuhnya jika mereka 'macet' seperti mereka untuk saya, dan mendaftar lagi untuk pengguna sebagai cek kewarasan:screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Pisis
3
Bagaimana Anda secara tidak sengaja membuat 1000 layar?
duhaime

Jawaban:

95

Anda dapat gunakan :

pkill screen

Atau

killall screen

Dalam OSX proses ini disebut LAYAR dalam semua huruf besar. Jadi, gunakan:

pkill SCREEN

Atau

killall SCREEN
Rahul Patil
sumber
2
Tidak disarankan menggunakan SIGKILL dalam kasus ini. SIGTERM akan menjadi pilihan yang jauh lebih baik.
Marco
Hai, Rahul Patil. mengapa layar tidak tercantum diTop
user15964
Bagaimana jika saya tidak memiliki izin? Apakah saya harus masuk dan keluar semua layar secara manual?
hipoglucido
13

Jika layar mati, gunakan:

screen -wipe
Adam_G
sumber
6
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 
Don Wei
sumber
5

Baru-baru ini mulai membiasakan diri dengan awk saya mengumpulkan ini dan itu melayani tujuannya. Saya mempostingnya karena cukup mudah dimengerti.

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

Di mana screen -lsdaftar semua layar saat ini. grep 'pattern'memfilter semua baris yang cocok. Kita kemudian bisa mendapatkan pegangan untuk semua layar yang terpisah dan dengan awk sys {command}kita dapat menyalin dan menempelkan satu perintah dan menjalankannya sys, $1mengacu pada argumen pertama yang diambil oleh awk. Akhirnya kami menjalankan perintah berhenti dengan screen -X quit.

Eliassen
sumber
1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit bekerja lebih baik untukku.
whereisalext
2

Saya agak bingung bagaimana Anda berhasil membuat 1000 "layar". Mungkin maksud Anda 1000 jendela layar (1000 jendela terminal berbeda dalam satu sesi layar)?

Jika Anda bermaksud 1000 jendela dalam satu sesi layar tunggal, maka solusi yang lebih elegan adalah keluar dari layar menggunakan perintah C-a \(ctrl-a diikuti oleh \).

Railgun2
sumber
1
Coba jalankan layar 1000x dalam layar. Apa yang terjadi? Anda mendapatkan 1000 jendela layar. Ya, itu benar, layar cerdas dan untungnya tidak menelurkan 1000 sesi layar. Jadi jika OP sudah memulai layar seharusnya jauh lebih mudah untuk secara tidak sengaja memulai 1000 layar windows daripada memulai 1000 sesi layar.
Railgun2
Aneh tetapi komentar yang saya balas tampaknya telah menghilang. Pokoknya saya membiarkan komentar di atas untuk catatan.
Railgun2
1
Sebenarnya ini cukup sederhana. Buat saja infinite loop (secara tidak sengaja) dan letakkan sesuatu seperti ini di sana screen -m sleep 100000. Ini terjadi dan saya tidak menyadarinya sampai sudah membuat lebih dari 1000 sesi layar.
BrainStone
0

Perintah berikut akan menghentikan semua layar tidak aktif:

perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'
Michael Vu
sumber
0
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
pengguna370823
sumber