Layar GNU - Tidak dapat memasang kembali layar setelah koneksi terputus

23

Saya menggunakan irssi di layar tetapi kehilangan koneksi. Setelah saya ssh kembali ke server, saya tidak bisa lagi melampirkan ke layar itu. layar -l menunjukkan bahwa layar sudah terpasang.

Saya mencoba layar -D untuk memaksa melepaskannya, dan katanya lepas tapi layar -l masih mengatakan itu terpasang. Saya mencoba layar -x dan hanya hang di sana.

[sub@server ~]$ screen -ls 
There are screens on:
 4033.poe (Detached)
 7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.

Apa yang bisa saya lakukan sekarang?

subhashish
sumber

Jawaban:

14

Jika Anda mencoba menghubungkan layar 'Terlampir', kemudian jalankan screen -xr irssi. Huruf besar '-X' mengirimkan perintah ke salah satu sesi layar, opsi huruf kecil '-x' memungkinkan Anda untuk terhubung kembali ke sesi terlampir. Tetapi Anda masih perlu memberikan nama sesi karena ada lebih dari satu.

Arcege
sumber
9

Saya telah membersihkan perilaku ini di masa lalu dengan membunuh shell yang memulai sesi layar. Pada dasarnya, membunuh semua instance bash untuk pengguna saya yang tidak dimiliki oleh layar.

POHON
sumber
2
Mencoba semua opsi (-RD, -xr) yang disebutkan di sini dan tidak dapat memulihkan sesi. Akhirnya membunuh sesi LAYAR dengan menemukan (ps-id | grep bash) itu.
so_mv
4

Anda memberinya nama yang tidak standar. Coba ini:screen -RD irssi

Keith
sumber
2
saya memiliki masalah yang sama, tetapi layar -RD <name> masih hang ... :-(
harald
4

Anda dapat mencoba:

#Reattach a session and if necessary detach it first.
screen -d -r 7728.irssi  

#Reattach a session. If necessary detach and logout remotely first.
screen -D -r 7728.irssi

itu selalu merupakan ide bagus menggunakan nama lengkap pid.tty

Agomezl
sumber
3

screendikenal karena tidak kompatibel di antara versi. Jika versi screentelah diperbarui di server, Anda mungkin tidak dapat melampirkan kembali ke sesi layar yang lebih lama.

Dalam hal ini, Anda bisa menggunakan biner SCREEN lama untuk memasang kembali (asalkan manajer paket distribusi Anda menyimpannya di suatu tempat), atau membunuh sesi sama sekali.

parasietje
sumber
2

Saya sudah cukup sukses dengan mengirimkan proses GNU / layar SIGCHLD (yang biasanya diterima ketika jendela ditutup), ini memaksa untuk menyentuh (dan mungkin membuat ulang) file socket.

Perhatikan juga bahwa ada dua cara untuk menjalankan screenexecutable yang hanya berbeda dalam hal: SCREENadalah komponen sisi server yang Anda coba sambungkan kembali, sedangkan screensisi klien yang mengocok data antara terminal Anda dan sisi server. Jadi, Anda mungkin ingin mencoba membunuh versi huruf kecil ...

Misalnya dalam berikut ini Anda dapat melihat bahwa proses saya screendan SCREENtidak dianggap sebagai orangtua dan anak, menunjukkan bahwa saya telah melampirkan ke sesi yang ada.

# ps fao pid,command
25070 SCREEN -U
25071  \_ vim +let &t_Co=256
25073  \_ -bash
25077  \_ -bash
...
18364  \_ sshd: username [priv]
18366  |   \_ sshd: username@pts/17
18367  |       \_ -bash
  870  |           \_ screen -U -x

Sesi baru lebih terlihat seperti ini:

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash
RobM
sumber
Bagaimana cara mengirim SIGCHILD?
giorgio79
1
Gunakan killperintah yang dinamai seperti ini: di kill -s SIGCHLD <PID>mana <PID>nomor ID Proses (kolom paling kiri dalam contoh output saya)
RobM
1

Ini terjadi pada saya ketika saya menggunakan vi di mana sesi membeku dan saya terputus. Saat mencoba memasang kembali layar menggunakan -Arx, prosesnya akan hang.

Mungkin ada proses anak serupa yang berjalan menyebabkan layar menggantung. Jika Anda mengingat satu fokus tertentu pada hal itu, jika tidak untuk mendapatkan daftar proses anak yang berjalan di bawah layar Anda lakukan:

ps ux -H

Yang akan menunjukkan proses anak bersarang:

zwood    28481  0.0  0.0 101148  8844 ?        Ss   Oct07   1:36 SCREEN -S mysession
zwood    28482  0.0  0.0  67436  1744 pts/2    Ss+  Oct07   0:00   /bin/bash
zwood    28515  0.0  0.0  67556  1876 pts/4    Ss+  Oct07   0:00   /bin/bash
zwood     4498  0.0  0.0  67436  1772 pts/5    Ss   Oct07   0:00   /bin/bash
zwood     2007  0.0  0.0  73604  1324 pts/5    S+   15:47   0:00     vi /home/zwood/.bashrc.custom
zwood    14670  0.0  0.0  67436  1768 pts/13   Ss+  Oct14   0:00   /bin/bash
zwood    27002  0.0  0.0  67436  1720 pts/11   Ss+  Oct20   0:00   /bin/bash
zwood    24748  0.0  0.0  67432  1712 pts/14   Ss+  Oct21   0:00   /bin/bash

Setelah membunuh proses vi yang menyebabkan masalah di tempat pertama, saya bisa memasang kembali layar tanpa masalah. Membunuh semua proses sebelumnya yang telah dipasang kembali ke layar mungkin merupakan ide yang bagus juga. Cukup gunakan:

kill -9 <pid>

Saya tidak tahu apa yang dilakukan layar di internal, mengapa vi menyebabkan layar hang, atau mengapa membunuh proses vi membawa layar saya kembali. Saya pernah mengalami masalah dengan layar di masa lalu dan telah mencoba apa yang kebanyakan orang merekomendasikan di utas ini tanpa hasil. Menemukan masalah ini, proses anak adalah satu-satunya hal yang berhasil bagi saya dan telah bekerja secara konsisten pada saat itu.

Hazok
sumber
Pembunuhan besar-besaran dari proses di bawah layar adalah satu-satunya hal yang menyelamatkan saya juga. Saya lebih suka kehilangan banyak proses di bawah layar, daripada kehilangan seluruh sesi layar!
Yonatan
0
screen -r 4033

screen -x 7728
Eduardo
sumber
0
killall -9 sshd

Itu berhasil untuk saya. Saya memiliki 3 layar berbeda, dan saya kehilangan 3 koneksi ssh berbeda. Setelah tersambung kembali, layar masih terpasang, saya mengeluarkan perintah di atas ... tentu saja saya kehilangan koneksi saya saat ini, tapi itu baru. Pada koneksi ulang berikutnya, setiap layar terlepas.

Catatan, jika Anda adalah pengguna super maka Anda harus menggunakan --useropsi untuk hanya membunuh dasmon ssh Anda.

frncmx
sumber