bunuh layar (tetapi tidak semua layar)


19

Saya memiliki beberapa layar yang berjalan di server Ubuntu yang dimulai sebagai:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

Dan saya perlu membunuh satu layar, tetapi tidak semuanya. Apa perintah yang benar untuk membunuh satu layar tertentu dengan namanya? Saya telah membaca halaman manual tetapi sepertinya saya tidak dapat menemukan perintah yang saya cari.

Saya juga ingin menulis perintah ini menjadi skrip bash jadi saya tidak bisa cukup screen -r screen1tekan Ctrl+ Xseperti biasa.


Maaf, pikir ini tentang Donkey Kong sebentar
Chopper3


Itu adalah tee yang bagus, kebanyakan orang tidak akan mendapatkannya, kecuali mereka telah melihat "The King of Kong": imdb.com/title/tt0923752
BassKozz

Kata yang benar untuk objek frase adalah "kamu".
Dijeda sampai pemberitahuan lebih lanjut.

3
Anda mengatakan "pahami" di sini dan "Terima kasih" di bawah. Itu harus "mengerti [untuk] kamu" dan "Terima kasih [untuk] kamu".
Dijeda sampai pemberitahuan lebih lanjut.

Jawaban:


19

Dari halaman manual:

   -X   Send the specified command to a running screen  session.  You  can
        use  the  -d or -r option to tell screen to look only for attached
        or detached screen sessions. Note that this command  doesn't  work
        if the session is password protected.

Anda dapat melakukan :

        screen -X -S <sessionid> kill

SEMPURNA!!! Terima kasih defraagh, musta merindukan itu pada pria itu.
BassKozz

Baik untuk tahu :-)
ℝaphink

9

Jika Anda melakukan screen -list, Anda akan melihat bahwa setiap nama layar dimulai dengan angka, yang merupakan PID layar:

 $ screen -list
There are screens on:
        12281.pts-1.jonah       (12/21/2009 07:53:19 PM)        (Attached)
        10455.pts-1.jonah       (12/19/2009 10:55:25 AM)        (Detached)
2 Sockets in /var/run/screen/S-raphink.

Dari sana, cukup kirim sinyal KILL ke PID khusus ini:

$ kill 12281

dan itu akan membunuh layar tertentu.


ini tidak akan berhasil karena saya menjalankannya dari skrip bash, dan saya lebih suka tidak harus menarik PID dari daftar-layar yang cocok dengan layar yang benar ... jawaban defraagh di atas bekerja seperti pesona. Terima kasih
BassKozz

Ok, bagus defraagh punya solusi sempurna untuk itu.
ℝaphink

1

solusi defraagh tidak bekerja untuk saya, namun saya dapat mematikan sesi layar menggunakan ide Raphink:

layar-daftar dapatkan ID proses

bunuh -9 PROCESSID

layar -bersihkan SESSIONID


1

Jika Anda memiliki beberapa layar dengan nama yang sama, Anda dapat mematikannya sekaligus:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • Command screen -lsmencetak layar dengan nomor prosesnya. Sebagai contoh, 4773.test adalah layar dengan nomor proses 4773 dan tes nama . Output sampel:

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • egrepFilter perintah di atas teks sampel yang dikirim melalui jalur pipa | .

  • Perintah awk -F "." '{print $1}'mengekstrak kolom pertama dari setiap baris. Pembatas antar kolom didefinisikan sebagai titik (.) Dengan opsi -F
  • Akhirnya perintah xargs killakan mematikan semua proses yang nomornya dikirim melalui pipa |. xargsdigunakan ketika kita ingin menjalankan perintah pada setiap input.

0

Anda membuka jendela baru dengan

Ctrl A + C

Anda menutup jendela dengan

Ctrl + D

atau keluar dari perintah di dalam jendela


0

Saya sudah berurusan dengan ini sebagai berikut:

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

Penjelasannya adalah bahwa Anda mengambil output dari screen -lsdan menemukan layar tertentu yang Anda tertarik dengan menggunakan grep kemudian menetapkan string itu ke variabel process.

Karena output dari screen -lsselalu PID diikuti oleh periode Anda kemudian dapat menggunakan cut untuk menyingkirkan periode dan semuanya setelahnya. dalam contoh di atas kita meletakkannya di dalam tanda kurung dan mengumpankannya ke perintah kill meskipun Anda bisa melakukannya secara linear yang mungkin termasuk menulis ke file temp dan membacanya.

Anda perlu memastikan bahwa nama layar Anda unik dan grep HANYA mengembalikan nama layar yang ingin Anda bunuh.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.