web-dev-qa-db-ja.com

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

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

screen -Dを強制的に切り離してみましたが、切り離しと表示されましたが、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.

私は今何ができますか?

23
subhashish

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

14
Arcege

スクリーンセッションを開始したShellを強制終了することにより、過去にこの動作を解消しました。基本的に、ユーザーがnotが所有していたすべてのbashインスタンスを強制終了します。

9
TREE

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

4
Keith

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

#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

4
Agomezl

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

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

3
parasietje

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

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

たとえば、次の例では、私のscreenおよびSCREENプロセスが親および子とは見なされていないことがわかります。これは、既存のセッションにアタッチしたことを示しています。

# 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
2
RobM

これは、セッションをフリーズして切断した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プロセスを強制終了すると画面が元に戻ったのかわかりません。私は過去に画面でこの問題に遭遇したことがあり、ほとんどの人がこのスレッドで推奨していないことを試してみました。この問題の子プロセスを見つけることが、私のために機能し、一貫して機能した唯一のものです。

1
Hazok
screen -r 4033

screen -x 7728
0
Eduardo
killall -9 sshd

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

注:スーパーユーザーの場合は、--userオプションは、sshデーモンのみを強制終了します。

0
frncmx