GNU-Screen이 표준 출력을 차단하지 못하도록 방지

GNU-Screen이 표준 출력을 차단하지 못하도록 방지

우리는 프로덕션 환경에서 애플리케이션을 실행하는 화면을 가지고 있습니다. (어떤 사람들은 반대할 수도 있다는 생각이 들지만 우리에게는 정말 잘 맞았습니다만...) 복사 모드에서 위로 스크롤한 다음 복사 모드 종료를 잊어버리고 분리하면 프로그램이 차단됩니다(제 생각에는 일정 시간이 지난 후).

현재 일어나고 있는 일은 활성 복사 모드로 인해 화면 버퍼가 채워지고 지워지지 않는다는 것입니다. 이로 인해 실행 중인 프로그램이 화면에 다시 들어가 복사 모드를 종료할 때까지 정지됩니다. 나는 이런 실수를 여러 번 저질렀습니다. 그것을 방지할 수 있는 방법이 있나요? (예를 들어, 분리 시 자동으로 복사 모드를 종료하거나 복사 모드에 있는 동안 분리할 수 없습니다.) 그렇지 않다면 tmux나 다른 대안은 어떻습니까?

답변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

관련 정보