Pemasangan kembali ke sesi layar yang ada

82

Saya memiliki program yang berjalan di bawah layar. Bahkan, ketika saya melepaskan diri dari sesi dan memeriksa netstat, saya dapat melihat program masih berjalan (yang saya inginkan):

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

Sekarang saya ingin menyambung kembali ke sesi menjalankan proses itu. Jadi saya memulai terminal baru, dan ketik layar -r

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Tetapi bagaimana saya tahu sesi mana yang menjalankan proses yang saya buat?

Sekarang salah satu dokumen yang saya temui mengatakan:

"Ketika Anda menggunakan jendela, ketikkan Ca A untuk memberinya nama. Nama ini akan digunakan dalam daftar jendela, dan akan membantu Anda mengingat apa yang Anda lakukan di setiap jendela ketika Anda mulai menggunakan banyak jendela. "

Masalahnya adalah ketika saya berada di sesi layar baru, saya mencoba untuk menekan kontrol + a dan tidak ada yang terjadi.

JohnMerlino
sumber
Cara cepat untuk memilih satu dari daftar beberapa layar terbuka, screen -rdiikuti oleh angka 1, 2, 3 ... dalam daftar layar itu.
user18099

Jawaban:

92

Ada dua level "daftar" yang terlibat di sini. Pertama, Anda memiliki "daftar jendela" dalam sesi individual, untuk apa ctrl-A A, dan kedua ada "daftar sesi" yang merupakan apa yang Anda tempelkan dalam pertanyaan Anda dan apa yang juga dapat dilihat screen -ls.

Anda dapat menyesuaikan nama sesi dengan -Sparameter, jika tidak menggunakan nama host Anda (teamviggy), misalnya:

$ screen

(ctrl-A d untuk melepaskan)

$ screen -S myprogramrunningunderscreen

(ctrl-A d untuk melepaskan)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

Sebagai bonus, Anda dapat menggunakan singkatan nama yang Anda berikan -Suntuk menghubungkan kembali:

screen -r myprog

(Saya terhubung kembali ke myprogramrunningunderscreensesi)

Paul
sumber
Itu ctrl + aa bekerja untuk Anda? Saya menekan kontrol + a pada waktu yang sama dan kemudian dengan cepat menekan lagi dan tidak ada yang terjadi.
JohnMerlino
Iya; ada perbedaan antara ctrl-A adan ctrl-A shift-A. Yang terakhir mendorong saya untuk Set window's title to:. Pastikan Anda menekan shift untuk A. kedua
Paul
Saya melakukannya: "layar -r 21tweet" dan dapatkan sebagai tanggapan: "Ada layar di: 3239.21tweet (21/08/2015 09:14:35) (Terlampir) Tidak ada layar untuk dilanjutkan sesuai dengan 21tweet." Apa ini?
Michael
Peringatan yang sangat tidak jelas dengan penamaan sesi layar adalah bahwa jika Anda menamainya -S, Anda harus menggunakan paling tidak singkatan singkatan nama mengikuti nomor ID dan titik dalam nama lengkap sesi layar saat melanjutkan, tidak seperti otomatis nama sesi yang dihasilkan, tempat Anda bisa memasukkan ID dan titik.
Spencer Williams
1
Salah ketik, diperbaiki. Dan situs ini tidak akan membiarkan saya memposting komentar yang singkat tanpa teks tambahan.
Paul
37

Saya punya kasus di mana screen -rgagal untuk menyambung kembali. Menambahkan -dbendera sehingga tampak seperti ini

screen -d -r

bekerja untukku. Ini terlepas dari layar sebelumnya dan memungkinkan saya untuk memasang kembali. Lihat Halaman Man untuk informasi lebih lanjut.

njcwotx
sumber
12

Cara mudah adalah dengan menghubungkan kembali ke layar yang sewenang-wenang

screen -r

Kemudian setelah Anda menjalankan layar, Anda bisa mendapatkan daftar semua layar aktif dengan menekan Ctrl-A "(yaitu kontrol-A diikuti dengan tanda kutip ganda). Kemudian Anda bisa memilih layar aktif satu per satu dan melihat apa yang sedang berjalan. Memberi penamaan layar tentu saja akan memudahkan untuk mengidentifikasi yang benar.

Hanya dua sen saya

Dr K
sumber
okie bagaimana saya memberi nama layar saya?
austin
Layar @ustin -S <sessionname>
Brian
4

Saya cenderung menggunakan kombo berikut ini di mana saya perlu mengerjakan beberapa mesin di beberapa kelompok:

screen -S clusterX

Ini menciptakan sesi layar baru di mana saya dapat membangun lingkungan.

screen -dRR clusterX

Inilah yang saya gunakan selanjutnya untuk menyambung kembali ke sesi layar itu. Bit yang bagus adalah bahwa jika sesi dilampirkan di tempat lain, itu melepaskan tampilan lainnya. Selain itu, jika tidak ada sesi untuk alasan yang aneh, seperti seseorang me-reboot server saya tanpa saya sadari, itu akan membuatnya. Akhirnya. jika ada beberapa sesi, ia menggunakan yang pertama.

Banyak pujian untuk https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions untuk tip ini beberapa waktu yang lalu.

SUNTING:

Juga ada beberapa penjelasan bermanfaat man screententang parameter cryptic

       -d -r   Reattach a session and if necessary detach it first.

       -d -R   Reattach a session and if necessary detach or  even  create  it
               first.

       -d -RR  Reattach  a  session  and if necessary detach or create it. Use
               the first session if more than one session is available.

       -D -r   Reattach a session. If necessary  detach  and  logout  remotely
               first.

ada lebih banyak dengan -Djadi pastikan untuk memeriksaman screen

Lefty G Balogh
sumber
2

Output dari screen -listdiformat seperti pid.tty.host. Pids dapat digunakan untuk mendapatkan proses anak pertama dengan pstree:

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

Anda akan mendapatkan daftar seperti ini

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...
tilnam
sumber
1
screen -d -r 4964

atau

screen -d -r 4874

$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
Vlad Kogan
sumber