bunuh sesi layar

65

Saya mencoba untuk membunuh sesi layar. Saya memperhatikan banyak pertanyaan terkait lainnya, tetapi tidak ada jawaban yang bekerja untuk saya. Saya mencoba untuk membunuh sesi berikut:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

Sekarang saya di sesi. Menurut dokumentasi:

http://www.gnu.org/software/screen/manual/screen.html#Quit

Saya seharusnya menekan "control a" dan kemudian "control \". Saya melakukan itu dan tidak ada yang terjadi.

Solusi lain dikatakan dengan menekan Ctrl+ adan mengetik: berhenti. Namun, sekali lagi itu tidak melakukan apa-apa. Bahkan, menekan control+ a, sama sekali tidak ada yang terjadi setelah itu kecuali pesan "No Other Window"

JohnMerlino
sumber
1
di layar v4.x, untuk membunuh semua sesi,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss
2
Sebagai catatan, Anda bisa melakukan screen -r porkypigatau screen -r 23520, daripada harus memasukkan string penuh. Nama layar seharusnya membuat segalanya lebih mudah, tidak lebih rumit.
Mikkel

Jawaban:

73

pertama Anda harus melampirkan kembali ke sesi layar
screen -r 23520seperti yang Anda lakukan Kemudian tekan ctrl+ adan kemudian modal Kdan tekan yketika itu menanyakan apakah Anda benar-benar ingin membunuh sesi

Yakub Minshall
sumber
2
Ini berfungsi jika ada masalah dengan proses yang berjalan di dalam layar, tetapi tidak jika ada masalah dengan layar itu sendiri. Itu adalah kasus 99% dari waktu, dan memiliki manfaat tambahan hanya mempengaruhi satu jendela di dalam layar daripada menghentikan semua jendela.
Mikkel
1
Ini untuk membunuh jendela, bukan sesi
Eric Wang
53

Anda dapat keluar dari layar itu tanpa melampirkannya. Pertama, temukan sesi:

$ screen -ls

dan kemudian berhenti:

$ screen -XS [session # you want to quit] quit

(-X = Jalankan perintah, -S sesi PID untuk dieksekusi pada)

[MEMPERBARUI]

Contoh:

screen -XS 20411 quit
shgnInc
sumber
1
Ini cukup sederhana. Anda dapat lebih menyederhanakannya dengan menggabungkan -X -S dengan -XS
AJ.
2
Anda harus memberi penghargaan pada jawaban innaM jika Anda menyalinnya
Martin Thoma
8

Ini akan membunuh semua layar yang terlepas:

layar -l | grep terlepas | cut -d. -f1 | awk '{print $ 1}' | xargs membunuh

Ini akan membunuh semua layar, terpasang atau terlepas

layar -l | grep pts | cut -d. -f1 | awk '{print $ 1}' | xargs membunuh
pengguna324207
sumber
7

Jadi dengan semua saran resmi itu, mari kita lakukan sesuatu yang lebih mudah, dan sama efektifnya, dan lebih mudah.

pkill screen

Siapa yang ingin masuk ke layar yang tidak dikenal dan tidak dibutuhkan hanya untuk menekan beberapa perintah yang hampir tidak bisa diingat? Ini menghindari masuk ke dalamnya sama sekali, dan langsung membunuhnya.

Plus, jika Anda memiliki lebih dari satu, ini akan membawa mereka semua dalam satu gerakan.

Brian Thomas
sumber
1
Perhatikan bahwa ini akan mematikan semua layar yang sedang berjalan, yang mungkin atau tidak sesuai keinginan Anda.
Mikkel
Bukan pilihan yang bagus. Saya sudah melakukannya selama beberapa waktu. Terkadang hal itu menyebabkan perilaku buruk (misalnya segera keluar dari akun pengguna Anda). Juga, seperti yang disebutkan @Mikkel, ini bisa menyebabkan semua layar Anda tertutup, yang tidak sesuai dengan keinginan Anda. Terkadang Anda perlu terus menjalankan beberapa (misalnya beberapa berjalan dengan sistem) dan menghentikan beberapa layar lainnya.
MAChitgarha
2

Saya mengalami masalah ini saat memperbarui layar. The screenperintah akan menggantung ketika mencoba untuk menempelkan kembali sesi, terlepas dari berapa banyak -Datau -Rsaya ditambahkan ke perintah. Namun, dengan screen -lsmudah memberikan pid sesi, yang memungkinkan Anda melakukan intervensi menggunakan yang berikut:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(Ini mirip dengan jawaban Brian Thomas, tetapi itu akan membunuh semua sesi layar yang sedang berjalan, yang mungkin tidak seperti yang Anda inginkan jika Anda memiliki beberapa layar terbuka tetapi hanya satu yang berperilaku salah.)

Mikkel
sumber
Setelah 6 jam menghancurkan kepalaku di internet ... jawabanmu adalah satu-satunya jawaban yang berhasil. Terima kasih sobat!
kRazzy R
1

Seperti Anda, saya ingin membunuh sesi layar saya dan menemukan dokumentasi tidak membantu. Yakin bahwa harus ada pintasan keyboard, saya menemukan bahwa
ctrl + aitu \
berfungsi

Saya kemudian mendapatkan prompt: "Benar-benar berhenti dan bunuh semua windows Anda [y \ n]"

Saya tidak yakin mengapa dokumentasi mengatakan ctrl + aitu ctrl + \. Itu tidak melakukan apa pun untuk saya.

lizp
sumber
1

Anda dapat menemukan id proses dari layar lari yang terpasang. Saya menemukan itu sama dengan id sesi yang dapat Anda peroleh dengan perintah:
screen -ls
Dan Anda dapat menggunakan perintah berikut untuk mematikan proses itu:
kill [sessionId]atau
sudo kill [sessionId]
Anda dapat membunuh layar meskipun terpasang pada jendela terminal lain.

Siddhant
sumber
0

Tekan ctrl + d untuk mematikan jendela layar. Ulangi ini sampai Anda membunuh semua jendela layar. Setelah Anda kehabisan semua layar windows akan mematikan sesi dan mengakhiri. Solusi terpendek jika Anda tidak memiliki banyak jendela

Dilushan
sumber