GNU-Screenが標準出力をブロックするのを防ぐ

GNU-Screenが標準出力をブロックするのを防ぐ

私たちは本番環境でアプリケーションを実行する画面を持っています。 (何人かの人々は反対するかもしれないと思いますが、私たちには本当にうまくいきましたが…)コピーモードで上にスクロールしてから、コピーモードの終了を忘れて切り離すとプログラムがブロックされます(私の考えには一定時間が経過した後) 。

現在起こっていることは、アクティブコピーモードのために画面バッファがいっぱいになって消去されないことです。これにより、実行中のプログラムが画面に戻り、コピーモードを終了するまで停止します。私はこの間違いを何度も犯しました。それを防ぐ方法はありますか? (たとえば、分離時に自動的にコピーモードを終了したり、コピーモード中に分離することはできません)。

答え1

線を引く

defnonblock on

存在する~/.screenrc

またおすすめ

defflow off

画面出力をブロックする代わりに、Ctrl-QとCtrl-Sをアプリケーションに渡します。

答え2

画面を修正せずに解決策がないかどうか疑問です。しかし、scroll.py少なくとも問題を示すためにこのスクリプトを作成しました。

#!/usr/bin/env python3
import time
with open("/tmp/scroll", mode="w") as f:
    t1 = time.time()
    while True:
        t2 = time.time()
        tdiff = t2 - t1
        t1 = t2
        text = f"tdiff={tdiff} {'!!!!!!!!' if tdiff > 0.5 else ''}"
        print(text, flush=True)
        print(text, flush=True, file=f)
        time.sleep(0.01)

./scroll.pyスクリーンセッションとはtail -f /tmp/scroll異なる端末で実行してください。Ctrl-A ESCコピーモードに入るには押します。数秒後にtail出力が停止し、コピーモードを終了すると、次のような出力が生成されます。

tdiff=0.010303020477294922 
tdiff=5.808627605438232 !!!!!!!!
tdiff=0.010957002639770508 

エラーレポート:https://savannah.gnu.org/bugs/index.php?63341

関連情報