Écran GNU - Impossible de se reconnecter à l'écran après une perte de connexion

23

J'utilisais irssi dans l'écran mais j'ai perdu la connexion. Après avoir rétabli la connexion au serveur, je ne peux plus me connecter à cet écran. screen -ls montre que l'écran est déjà attaché.

J'ai essayé l' écran -D pour forcer le détachement, et il disait détacher mais l'écran -ls dit toujours qu'il est attaché. J'ai essayé l' écran -x et il se bloque juste là.

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

Que puis-je faire maintenant?

subhashish
la source

Réponses:

14

Si vous essayez de connecter l'écran «Attaché», exécutez screen -xr irssi. Le «-X» majuscule envoie une commande à l'une des sessions écran, l'option «-x» minuscule vous permet de vous reconnecter à une session attachée. Mais vous devez toujours donner le nom de la session car il y en a plusieurs.

Arcege
la source
9

J'ai effacé ce comportement dans le passé en tuant le shell qui a commencé la session d'écran. Fondamentalement, tuer toutes les instances de bash pour mon utilisateur qui n'appartiennent pas à screen.

ARBRE
la source
2
J'ai essayé toutes les options (-RD, -xr) mentionnées ici et n'a pas pu récupérer la session. J'ai fini par tuer la session SCREEN en la trouvant (ps -ef | grep bash).
so_mv
4

Vous lui avez donné un nom différent de celui par défaut. Essaye ça:screen -RD irssi

Keith
la source
2
j'ai un problème similaire, mais l'écran -RD <nom> se bloque toujours ... :-(
harald
4

tu peux essayer:

#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

c'est toujours une bonne idée d'utiliser le nom complet pid.tty

Agomezl
la source
3

screenest connu pour ne pas être rétrocompatible entre les versions. Si la version de a screenété mise à jour sur le serveur, il est possible que vous ne puissiez plus vous rattacher à des sessions d'écran plus anciennes.

Dans ce cas, vous pouvez soit utiliser l'ancien binaire SCREEN pour le rattacher (à condition que votre gestionnaire de packages de distribution l'ait enregistré quelque part), soit supprimer complètement la session.

parasietje
la source
2

J'ai eu un certain succès en envoyant au processus GNU / screen un SIGCHLD (qu'il reçoit normalement quand une fenêtre est fermée), cela l'oblige à toucher (et éventuellement recréer) le fichier socket.

Notez également qu'il existe deux façons d'invoquer l' screenexécutable qui ne diffèrent qu'en cas de: SCREENle composant côté serveur auquel vous essayez de vous reconnecter, tandis que screenle côté client qui mélange les données entre votre terminal et le côté serveur. Donc, vous voudrez peut-être essayer de tuer la version minuscule ...

Par exemple, dans ce qui suit, vous pouvez voir que mes processus screenet SCREENne sont pas considérés comme des parents et des enfants, indiquant que je me suis attaché à une session existante.

# 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

Les nouvelles sessions ressemblent plus à ceci:

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash
RobM
la source
Comment envoyer un SIGCHILD?
giorgio79
1
Utilisez la killcommande au nom effrayant comme ceci: kill -s SIGCHLD <PID><PID>est le numéro d'ID de processus (colonne la plus à gauche dans mon exemple de sortie)
RobM
1

Cela m'est arrivé pendant que j'utilisais vi où la session s'est figée et je me suis déconnecté. Lorsque vous tentez de rattacher l'écran à l'aide de screen -Arx, le processus se bloque simplement.

Il peut y avoir un processus enfant similaire en cours d'exécution provoquant le blocage de l'écran. Si vous vous en souvenez en particulier, concentrez-vous sur cela, sinon pour obtenir une liste du processus enfant exécuté sous votre écran, procédez comme suit:

ps ux -H

Qui montrera les processus enfants imbriqués:

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

Après avoir tué le processus vi qui a causé le problème en premier lieu, j'ai pu rattacher l'écran sans aucun problème. Tuer tous les processus précédents qui avaient été rattachés à l'écran est également une bonne idée. Utilisez simplement:

kill -9 <pid>

Je ne sais pas ce que fait l'écran en interne, pourquoi vi a fait bloquer l'écran, ni pourquoi le fait de tuer le processus vi a ramené mon écran. J'ai rencontré ce problème avec l'écran dans le passé et j'avais essayé ce que la plupart des gens recommandaient dans ce fil sans succès. Trouver ce processus enfant problématique est la seule chose qui a fonctionné pour moi et qui y a travaillé de manière cohérente.

Hazok
la source
Une vague de processus sous l'écran a été la seule chose qui m'a également sauvé. Je préfère perdre de nombreux processus sous l'écran plutôt que de perdre toute la session d'écran!
Yonatan
0
screen -r 4033

screen -x 7728
Eduardo
la source
0
killall -9 sshd

Ça a marché pour moi. J'avais 3 écrans différents et j'ai perdu 3 connexions ssh différentes. Après la reconnexion, les écrans étaient toujours attachés, j'ai émis la commande ci-dessus ... bien sûr, j'ai perdu ma connexion actuelle, mais c'était une nouvelle connexion. Lors de la prochaine reconnexion, chaque écran a été détaché.

Remarque, si vous êtes un superutilisateur, vous devez utiliser l' --useroption pour ne tuer que vos démons ssh.

frncmx
la source