GNU画面-接続が失われた後、画面に再接続できません


23

画面でirssiを使用していましたが、接続が失われました。サーバーにsshした後、その画面に接続できなくなりました。screen -lsは、画面がすでに接続されていることを示します。

screen -Dで強制的にデタッチしようとしましたが、detachと表示されましたが、screen -lsはまだ接続されていると表示されています。screen -xを試してみましたが、そこでハングします。

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

今何ができますか?

回答:


14

「添付」画面に接続しようとしている場合は、を実行しscreen -xr irssiます。大文字の「-X」はスクリーンセッションの1つにコマンドを送信し、小文字の「-x」オプションを使用すると、接続されたセッションに再接続できます。ただし、セッション名は複数あるため、セッション名を指定する必要があります。


9

過去にこの動作をクリアするには、スクリーンセッションを開始したシェルを強制終了しました。基本的に、スクリーンが所有していないユーザーのすべてのbashインスタンスを強制終了します。


2
ここに記載されているすべてのオプション(-RD、-xr)を試しましたが、セッションを回復できませんでした。それを見つけて(ps -ef | grep bash)SCREENセッションを強制終了しました。
so_mv

4

デフォルト以外の名前を付けました。これを試して:screen -RD irssi


2
私は同様の問題を抱えていますが、画面-RD <name>がまだハングしています... :
harald

4

あなたが試すことができます:

#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

常にフルネームを使用することをお勧めします pid.tty


3

screenバージョン間で下位互換性がないことが知られています。screenサーバーでバージョンが更新された場合、古いスクリーンセッションに再接続できなくなる可能性があります。

その場合は、古いSCREENバイナリを使用して再接続するか(配布パッケージマネージャがどこかに保存している場合)、セッションを完全に強制終了できます。


2

GNU / screenプロセスにSIGCHLD(ウィンドウが閉じられたときに通常受信する)を送信することである程度成功しました。これにより、ソケットファイルにタッチ(および場合によっては再作成)することが強制されます。

また、screen実行可能ファイルを呼び出す方法には2つの方法があることに注意してください。これらSCREENは、再接続しようとしているサーバー側コンポーネントscreenと、端末とサーバー側の間でデータをシャッフルするクライアント側です。したがって、小文字のバージョンを削除してみてください。

たとえば、次の例では、自分screenSCREENプロセスが親と子とは見なされないことを確認できます。これは、既存のセッションにアタッチしたことを示しています。

# 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

新しいセッションは次のようになります。

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

SIGCHILDを送信する方法は?
-giorgio79

1
scarilyという名前の使用kill:そうのようなコマンド(私の出力例では一番左の列)はプロセスID番号であるkill -s SIGCHLD <PID><PID>
RobM

1

これは、セッションがフリーズして切断されたviを使用しているときに起こりました。screen -Arxを使用して画面に再接続しようとすると、プロセスがハングします。

同様の子プロセスが実行されていて、画面がハングしている可能性があります。特にそのことに焦点を当てたものを思い出す場合、そうでない場合は、画面の下で実行されている子プロセスのリストを取得します:

ps ux -H

ネストされた子プロセスが表示されます:

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

そもそも問題の原因となったviプロセスを終了した後、問題なく画面を再接続できました。スクリーンに再アタッチされた以前のプロセスを強制終了することも、おそらく良い考えです。ただ使用する:

kill -9 <pid>

内部で画面が何をしているのか、viが画面をハングさせた理由、またはviプロセスを強制終了して画面が戻った理由がわかりません。私は過去に画面でこの問題に遭遇しましたが、ほとんどの人がこのスレッドで推奨していることを運よく試しました。この問題の子プロセスを見つけることは、私のために働いており、それで一貫して働いている唯一のものです。


画面の下のプロセスの殺到は、私を救った唯一のものでした。画面セッション全体を失うよりも、画面下の多くのプロセスを失いたいと思います!
ヨナタン


0
killall -9 sshd

それは私のために働いた。3つの異なる画面があり、3つの異なるssh接続が失われました。再接続後、画面はまだ接続されたままで、上記のコマンドを発行しました...もちろん、現在の接続を失いましたが、それは新鮮なものでした。次回の再接続時に、すべての画面が切り離されました。

スーパーユーザーである場合は、--usersshデーモンのみを強制終了するオプションを使用する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.