GNU ekranı - Bağlantı kesildikten sonra ekrana yeniden bağlanılamıyor


23

Ekranda irssi kullanıyordum ancak bağlantı koptu. Sunucuya geri döndükten sonra, artık o ekrana ekleyemiyorum. screen -ls, ekranın zaten bağlı olduğunu gösterir.

Ekranı -D'yi ayırmaya zorlamak için denedim ve ayırdığını söyledi ancak ekran -ls hala bağlı olduğunu söylüyor. Screen -x'i denedim ve orada duruyor.

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

Şimdi ne yapabilirim?

Yanıtlar:


14

'Ekli' ekranını bağlamaya çalışıyorsanız, o zaman çalıştırın screen -xr irssi. Büyük harf '-X' ekran oturumlarından birine komut gönderir, küçük harf '-x' seçeneği ekli bir oturuma yeniden bağlanmanıza izin verir. Ancak yine de birden fazla olduğundan oturum ismini vermeniz gerekiyor.


9

Bu davranışı geçmişte ekran oturumunu başlatan kabuğu öldürerek temizledim . Temel olarak, ekranımın sahip olmadığı kullanıcı için tüm bash örneklerini öldürmek .


2
Burada belirtilen tüm seçenekleri denedim (-RD, -xr) ve oturumu kurtaramadı. SCREEN oturumunu bularak öldürdü (ps -ef | grep bash).
so_mv

4

Varsayılan olmayan bir isim verdiniz. Bunu dene:screen -RD irssi


2
benzer bir sorun var ama -RD <name> ekranı hala kilitleniyor ... :-(
10

4

deneyebilirsin:

#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

her zaman iyi bir fikir tam adını kullanın pid.tty


3

screensürümler arasında geriye dönük uyumlu olmadığı bilinmektedir. Eğer sürümü screensunucuda güncellendiyse, artık eski ekran oturumlarına tekrar bağlanamazsınız.

Bu durumda, yeniden bağlamak için (dağıtım paketi yöneticinizin bir yere kaydetmesi şartıyla) eski SCREEN ikili dosyasını kullanabilir veya oturumu tamamen sonlandırabilirsiniz.


2

GNU / ekran işlemine bir SIGCHLD (normalde bir pencere kapalıyken aldığı) göndererek bir miktar başarı elde ettim, bu onu soket dosyasına dokunmaya (ve yeniden yaratmaya) zorlar.

Ayrıca screen, yalnızca bu durumda farklı olan yürütülebilir dosyayı çağırmanın iki yolu olduğunu unutmayın : SCREENyeniden bağlanmaya çalıştığınız sunucu tarafı bileşen iken screen, terminalinizle sunucu tarafı arasındaki verileri karıştıran istemci tarafıdır. Demek küçük versiyonu öldürmeyi denemek isteyebilirsin ...

Örneğin, aşağıdakilerde benim screenve SCREENsüreçlerin ebeveynim ve çocuk olarak kabul edilmediğini, mevcut bir oturuma eklediğimi belirttiğini görebilirsiniz.

# 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

Yeni seanslar şuna benziyor:

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash

Bir SIGCHILD nasıl gönderilir?
giorgio79

1
Scarily adlandırılmış kullanın kill: şöyle komutu (benim örnek çıkışında en sağda yer sütun) Süreç kimlik numarasıdırkill -s SIGCHLD <PID><PID>
RobM

1

Bu oturumun donduğu ve bağlantım kesildiği yerde vi kullanırken, başıma geldi. Ekranı -Arx kullanarak ekrana yeniden yerleştirmeye çalışırken, işlem yalnızca askıda kalıyordu.

Ekranın kapanmasına neden olan benzer bir alt işlem olabilir. Özellikle bunlardan birine odaklandığınızı hatırlarsanız, aksi halde ekranınızın altında çalışan alt işlemlerin bir listesini almak için:

ps ux -H

İç içe geçmiş çocuk işlemlerini gösterecek olan:

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

Soruna neden olan vi sürecini öldürdükten sonra, herhangi bir sorun yaşamadan ekrana yeniden yerleştirebildim. Ekrana yeniden bağlanmış olan herhangi bir işlemi öldürmek de iyi bir fikir olabilir. Sadece kullan:

kill -9 <pid>

Dahili olarak hangi ekranın ne yaptığını, vi'nin neden ekranın durmasına neden olduğunu ya da neden vi işlemini öldürmemin ekranımı geri getirdiğini bilmiyorum. Geçmişte ekran ile bu sorunla karşılaştım ve çoğu insanın bu konudaki önerilerini şanssızlıkla denedim. Bu problemi bulmak çocuk süreci benim için çalışmış ve sürekli olarak çalışmış tek şeydir.


Ekranın altındaki süreçlerin ölümcül çılgınlığı da beni kurtaran tek şeydi. Tüm ekran oturumunu kaybetmek yerine, ekranın altındaki birçok işlemi kaybetmeyi tercih ederim!
Yonatan


0
killall -9 sshd

Benim için çalıştı. 3 farklı ekranım vardı ve 3 farklı ssh bağlantısını kaybettim. Yeniden bağlandıktan sonra, ekranlar hala eklenmiş, yukarıdaki komutu verdim ... tabii ki şu anki bağlantımı kaybettim, ama yeni bir tanesiydi. Bir sonraki yeniden bağlantıda, her ekran ayrıldı.

Süper kullanıcı iseniz, --usersadece ssh daemonlarınızı öldürmek için bu seçeneği kullanmalısınız .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.