Osx

如何在啟動時調試/修復螢幕崩潰

  • April 13, 2014

(這是一個關於 OS X 版本的 Gnu 螢幕的問題。我不知道這是否有什麼不同——我猜 Unix 和 Linux 的螢幕效果會比 Ask Different 更好。)

當我在終端上的電腦上時,我輸入了一個命令,例如

screen -dRR my_session_name

可以訪問新的螢幕會話。

在 SSH 上,如果會話已經在執行,我似乎可以重新附加到會話:

screen -R my_session_name

但是創建一個新會話(無論是否存在其他會話,但最令人沮喪的是沒有其他會話)將掛起,唯一的逃避方法是將^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

如您所見,我已經嘗試添加和註釋各種選項來嘗試解決此問題。(剛才,我在兩個和外部會話中都嘗試了fishand ,有和沒有,有和沒有 a 。)我在非常快和非常慢的連接上也看到了相同的行為。bash``fish``bash``noblock``screen -t

我將非常感謝以下任何資訊:

  • 關於發現問題的建議(strace/dtrace 輸出的重要部分,還有什麼?)
  • .screenrc選項的建議,
  • 完全不同的東西?

很高興發布更多資訊,但希望避免整個dtruss輸出,因為它有數百行長。

側面回答,在這種情況下是特定於 OS X 的。

一個選項,也是我在這種情況下最後使用的一個選項,如下所示:

使用某些東西在screen本地啟動,這將起作用,然後重新附加到會話。

我編寫了一個 python 程序,它生成並執行一個蘋果腳本程序,它打開一個新的 Terminal.app 視窗並執行你要求的命令,即使你通過 SSH (顯然,該帳戶必須在 GUI 上登錄)機器本身才能工作)。

它被稱為“ osxhijack ”,它在 github 上。你像這樣呼叫它:

hijack screen -dRR my_new_session

然後您可以使用以下方法立即重新連接:

screen -R my_new_session

如果一個“真實”的答案浮出水面(即,如果我發現我的螢幕安裝出了什麼問題/出了什麼問題),我將用一個新的答案更新這個問題。

引用自:https://unix.stackexchange.com/questions/124439