再開するために分離された画面を取得することはできません


11

私はパテを使用しており、信頼性の低いワイヤレス接続を使用しているため、画面を使用して作業を続けています。多くの場合、接続が切断され、画面を再接続できません。私は走りますscreen -D -RR、そして、それはいつまでもそこに座ります。私はctrl+z自分のコンソールを元に戻そうとしましたが、すべての結果が続きps aux | grep screen、その後も同じ結果になります。言及したいdとrの任意の組み合わせを試してみますが、それでもそのままです。私の画面はそこにあります、それは何もしません、少なくともすべての再開。kill -9screen -D -RR

スクリーンセッションを再開するためのヒントやコツ、アイデアはありますか?

回答:


15

接続をアクティブな画面にドロップしてから再接続すると、これを確認しました。 Bug#27462(「元のセッションが失われたときに再接続が停止する」)に、問題が説明されています。発生しているように見えるのは、画面が離れようとしていることを保持しているttyに通知しようとしていることですが、接続が切断されたためttyがハングするため、タイムアウトが発生するまで待機する必要があります(5分以上)ある場合には)。

それを修正するために、私はこれを行います:

  • どのttyがスクリーンセッションを保持しているかを把握する ps -ef | grep screen | grep pty
  • そのttyに関連付けられているログインbashを見つける ps -ef | grep bash | grep $PTY
  • そのバッシュを殺す kill -KILL $PID

これにより、画面の切断が正しく完了し、正常に再接続できます。

これをいくらか自動化するサンプルスクリプトについては、こちらご覧ください


ps -ef | grep画面| grep ttyは、ps -ef | grep screenは、文字列ttyで何も返しません。
デイブアーロンスミス

実際には、サンプルスクリプトがこのトリックを行っているようです。ありがとう!
デイブアーロンスミス

1
ええ、私は「tty」ではなく「pty」を意味しました。
デビッドマッキントッシュ

2

スクリーンセッションでも同様の問題が発生しました。それらに名前を付け、マルチユーザーセッションとしてセットアップします。私が見つけたのは、セッションをリストしているが、再接続するものがないことを教えてくれたことです。それから私は試しました:

screen -x <session_name>

それはチャンピオンのように働いた!


1

どのタイプの接続を使用していても、画面が戻らないという問題が発生したとは言えません。私の通常の方法:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName

1
たとえば、screen -listは32322.mySession(Attached)を返します。次に、-d mySessionをスクリーニングします。その後、screen -listは32322.mySession(Attached)を返し、screen -r mySessionは戻りますdaveSessionに一致する再開する画面はありません。
デイブアーロンスミス

「screen -d」だけを試しましたか?
ジェイソンアントマン


0

Soulrce:https ://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname

0

私のように賢い人rootは、通常のユーザーアカウントと同様に開始されたスクリーンセッションを再開しようとしていました。次のls /var/run/screenディレクトリを表示してこれを見つけましたroot


0

同じ問題が時々発生します(画面-r -dが再開されず、応答しません)。修正するには、screenセッションに関連付けられた端末(tty / pty)を見つけます:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

リストされている端末を見つけます(この例ではpts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

その端末(通常はシェル)のプロセスを強制終了します。

kill 12293

もう一度psを実行して、消失したことを確認します。そうでない場合:

kill -9 12293

私のサーバー(gnu / linux)では、-9が死ぬまで数回殺す必要があります。

そのttyのすべてのプロセスが終了すると、画面は正しく再開するはずです。

screen -r -d

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