如何在啟動時調試/修復螢幕崩潰
(這是一個關於 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
如您所見,我已經嘗試添加和註釋各種選項來嘗試解決此問題。(剛才,我在兩個和外部會話中都嘗試了
fish
and ,有和沒有,有和沒有 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
如果一個“真實”的答案浮出水面(即,如果我發現我的螢幕安裝出了什麼問題/出了什麼問題),我將用一個新的答案更新這個問題。