web-dev-qa-db-ja.com

起動時に画面がクラッシュするのをデバッグ/修正する方法

(これはGnuscreenのOSXバージョンに関する質問です。これが違いを生むかどうかはわかりません-そしてUnixとLinuxはAskDifferentよりも優れたscreen-fuを持っていると思いました。)

物理的に端末のコンピューターの前にいて、次のようなコマンドを入力したとき

screen -dRR my_session_name

I can新しい画面セッションにアクセスできます。

SSHを使用しているときに、セッションがすでに実行されている場合は、セッションに再接続できるようです。

screen -R my_session_name

しかし、新しいセッションを作成すると(他のセッションが存在するかどうかに関係なく、存在しない場合は最もイライラします)、hang、エスケープする唯一の方法は^Zでバックグラウンドにプッシュすることです。次に、fgを使用してジョブを再開します。その時点で、ジョブが終了したことが通知されます(Sorry, cannot contact session "processnumber.tty.hostname" again.

Sudo dtruss screen(Mac OS Xのstraceのバージョン)を実行しようとしましたが、(非常に冗長な)出力で何を探すべきかわかりません。

私はしばらくの間(別の都市で数日間)マシンから離れているので、本当に新しいスクリーンセッションを開始する必要があります!

私の~/.screenrc

# Set the Shell to use fish:
Shell "/usr/local/bin/fish"

# Make xterm scrolling work properly with screen.
# Note, this works in Terminal.app and iTerm too.
#termcapinfo xterm-256color|xterm-color|xterm|xterms|xs|rxvt ti@:te@

# Custom escape character like this:
escape ^Xx

# always create these sessions for me:
screen -t "foo" 1

# test to see if I can create new screens from SSH in any way:
#nonblock on

ご覧のとおり、これを解決するためにさまざまなオプションを追加してコメントアウトしてみました。 (今、私はfishbashの両方で、fishbashの両方の外部セッションから、noblockの有無、およびscreen -tの有無で試しました。)また、非常に高速で非常に同じ動作が見られます。遅い接続。

次の情報のいずれかに非常に感謝します。

  • 問題を見つけるための提案(strace/dtrace出力の重要な部分、何か他のもの?)
  • 新しい.screenrcオプションの提案、
  • まったく違うもの?

より多くの情報を投稿できてうれしいですが、数百行の長さであるため、dtruss出力全体を避けたかったのです。

1
tehwalrus

横向きの回答、この場合はOS X固有。

1つのオプション、およびこの場合に最後に使用したオプションは次のとおりです。

何かを使用してローカルでscreenを起動します。これは機能し、セッションに再接続します。

pythonスクリプトプログラムを生成して実行するAppleスクリプトプログラムを作成しました。このプログラムは、新しいTerminal.appウィンドウを開き、要求したコマンドを実行します。 'SSH経由です(これが機能するには、明らかに、アカウントがマシン自体のGUIにログインしている必要があります)。

これは「osxhijack」と呼ばれ、githubにあります ここ 。あなたはそれを次のように呼び出します:

Hijack screen -dRR my_new_session

次に、次を使用してすぐに再接続できます。

screen -R my_new_session

「本当の」答えが明らかになった場合(つまり、画面のインストールで何が間違っていたのかがわかった場合)、この質問を新しい答えで更新します。

0
tehwalrus