tmux는 Ctrl-C를 사용하여 프로세스를 느리게 중단합니다


25

tmux에서 많은 출력으로 명령을 실행했지만 Ctrl-C로 명령을 취소하기로 결정하면 중지되기 전에 10-15 초의 지연이 발생합니다. 그러나 tmux 외부에서 동일한 작업을 수행하면 즉시 중지됩니다. 왜 이것이고 고칠 수 있습니까?

실제로이 문제는 grep -R큰 디렉토리에서 작업 할 때 발생 하며 검색이 충분히 제한되지 않습니다. 해결 방법은 결과가 wc너무 길지 않도록 결과를 파이프하는 것이지만 피해야 할 또 다른 단계입니다.


노트:

  • 이는 Gnome Terminal, uxterm, st 및 일반 가상 터미널 (예 : ctrl-alt-f2)에서 동일한 동작을 갖지만 지연은 일반 가상 터미널에서 적습니다.
  • 나는 유일한 사람이 아닙니다 : http://www.mail-archive.com/tmux-users@lists.sourceforge.net/msg01569.html
  • 터미널 창이 더 크면 지연 시간이 길어집니다. 전체 화면 터미널의 grep -R경우 복잡한 홈 디렉토리에서 중지하는 데 약 15 초가 걸립니다 (다른 인수 없음). 80x25 문자 터미널의 경우 거의 즉시 중지됩니다.

나는 눈에 띄는 차이를 느끼지 못한다. 나는 시도했습니다 grep -R "a" ~/(파일에 기록되지 않음) ... 그리고 yes | nl | cut -f1 | head -9999999 > ~/file다음 cat ~/file.
Peter.O

@ Peter.O 단순히 "yes"를 입력하고 Enter를 누르면 tmux가 파멸됩니다.
solotim

답변:


10

tmux에는 이제 다음 옵션이 있습니다.

c0-change-interval interval
c0-change-trigger trigger

^ C 및 친구를보다 쉽게 ​​입력 할 수 있도록 값을 설정할 수 있습니다. 참조 man tmux:

이 두 옵션은 창에 대한 간단한 속도 제한 형식을 구성합니다. tmux가 1 밀리 초 내에 화면을 수정하는 트리거 C0 시퀀스 (예 : 캐리지 리턴, 줄 바꿈 또는 백 스페이스) 이상을 발견하면 분할 창 업데이트를 즉시 중지하고 대신 간격 ( 밀리 초) 마다 다시 그립니다 . 이렇게하면 빠른 출력 (예 : yes (1))이 터미널을 압도하는 것을 방지 할 수 있습니다. 기본값은 트리거는 250이고 간격은 100입니다. 트리거가 0이면 속도 제한이 비활성화됩니다.


이것이 작동하기 때문에 허용되는 솔루션이어야합니다.
polym

2
예 : setw -g c0-change-trigger 10 setw -g c0-change-interval 250>> ~ / .tmux.conf
DmitrySandalov

2
나는 tmux 2.3에서 이것을 시도했지만 인식되지 않았습니다. 명령이 많은 출력을 뿌릴 때 완전히 사용할 수 없게됩니다.
ijt

1
Tmux 2.1부터는 raw.githubusercontent.com/tmux/tmux/2.6/CHANGES 에 따라 이러한 옵션이 더 이상 존재하지 않습니다. 속도 제한에 대한 c0- * 옵션이 제거되었습니다. 대신 백 오프 방식이 사용됩니다.
megar

7

kill-pane세션 내에서 언제든지 명령을 실행할 수 있습니다 . 터미널 텍스트가 가비지처럼 보이는 경우 창 이름을 바꾸거나 발행 reset하면 문제가 해결됩니다.


4

프로세스와 터미널 tmux사이에 자체를 삽입 하기 때문에 cat에서 출력을 읽고 cat터미널에 쓰고 동시에 터미널 (^ C)에서 입력을 읽고 셸로 보내서 명령. 지연의 원인이 무엇인지 확실하지 않지만 tmux사용자와 셸 사이에서 I / O를 버퍼링 하는 방법에 관한 것 입니다 tmux.


3

지연 시간이 짧은 연결을 통해 ssh를 사용한다고 가정하고 mosh를 사용해 보셨습니까 ? 입력 예측, 생존 단절 및 클라이언트 측의 IP 변경과 같은 다른 멋진 것들 중에서도 Ctrl-C를 사용할 때 (전체 스트림을 보내는 대신 주기적으로 터미널 내용 만 업데이트하여) 반응 시간을 향상시킵니다. .

당신은 사용할 수 있습니다 tmux내에서 mosh아무 문제없이.


이상하게도, 이것은 현지에서 일할 때 발생합니다. mosh 는 꽤 깔끔하게 보입니다.
눈덩이

1

tmux 2.3 에서이 문제가 발생했습니다. 위에서 설명한대로 c0-change-interval 및 c0-change-trigger 옵션을 설정하려고했지만 더 이상 사용할 수 없습니다. 새로 시도한 솔루션의 git change는 다음과 같습니다. https://github.com/tmux/tmux/commit/3f4ee98162cd5bb7000f93fec0e631e123b1281d

tmux 1.8로 되 돌리면 옵션을 설정하지 않아도 문제가 해결되었습니다.


해결 방법을 사용하는 대신이 문제를 해결하려고 시도하는 것처럼 보이므로 최신 버전은 출력에 대해 더 나아질 것입니다. github.com/tmux/tmux/issues/849
dragon788
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.