画面で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.
私は今何ができますか?
「接続」画面を接続しようとしている場合は、screen -xr irssi
。大文字の「-X」はスクリーンセッションの1つにコマンドを送信し、小文字の「-x」オプションを使用すると、接続されたセッションに再接続できます。ただし、複数あるため、セッション名を指定する必要があります。
スクリーンセッションを開始したShellを強制終了することにより、過去にこの動作を解消しました。基本的に、ユーザーがnotが所有していたすべてのbashインスタンスを強制終了します。
デフォルト以外の名前を付けました。これを試して: screen -RD irssi
あなたが試すことができます:
#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
screen
は、バージョン間で下位互換性がないことで知られています。サーバーでscreen
のバージョンが更新された場合、古いスクリーンセッションに再接続できない可能性があります。
その場合、古いSCREENバイナリを使用して再接続するか(配布パッケージマネージャーがどこかに保存した場合)、セッションを完全に終了することができます。
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
これは、セッションをフリーズして切断した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プロセスを強制終了すると画面が元に戻ったのかわかりません。私は過去に画面でこの問題に遭遇したことがあり、ほとんどの人がこのスレッドで推奨していないことを試してみました。この問題の子プロセスを見つけることが、私のために機能し、一貫して機能した唯一のものです。
screen -r 4033
screen -x 7728
killall -9 sshd
それは私のために働いた。 3つの異なる画面があり、3つの異なるssh接続が失われました。再接続後も画面は接続されたままで、上記のコマンドを発行しました。もちろん、現在の接続は切断されましたが、それは新しい接続でした。次の再接続時に、すべての画面が切り離されました。
注:スーパーユーザーの場合は、--user
オプションは、sshデーモンのみを強制終了します。