Terminale çok fazla metin çıktığında tmux donmasını önlemenin bir yolu var mı?


35

Bir programlar çok fazla çıktı oluşturduğunda xterm içindeki tmux oturumunda cat very_long_file tüm oturum bir süre donmuş durumda. Ctrl-C tuşlarına bassam bile hiçbir şey kesintiye uğramaz. Muhtemelen, çünkü tmux donmuş ve Ctrl-C'yi çıktı üreten programa iletmiyor. Bunu önlemenin bir yolu var mı.


Sorun, programın çıktısını, terminalinizin gösterebileceğinden çok daha hızlı bir şekilde standart dışı bir hale getirmesidir. Ctrl-C'ye bastığınızda, işlem gerçekten öldürülür, ancak terminaliniz tamponlanmış çıktıyı yazdırmaya devam eder.
chepner

1
Yatay bölme tmux bölmeleri (yani% C-b%) bu konuya tam bölmelerden veya dikey bölmelerden çok daha hassastır. Ayrıca, C-bd'nin çalıştırılması ve yeniden takılması, geçici olarak olsa da programı "çözecektir". Tmux konfigürasyonlarına girmeye istekli olmadığınız sürece gerçekten bir çözüm yoktur.
RussellStewart

Yanıtlar:


14

Doğru çözüm, çıkışı denemek ve oranını sınırlamak için cm- * seçeneklerine bakmaktır. Bu sorunun var olmasının nedeni, terminale verinin gösterebileceğinden daha hızlı gönderilmesinden kaynaklanmaktadır, bu nedenle hız sınırlaması tek yoldur.


c0-change-trigger ve c0-change-range, sorunu çözüyor gibi görünüyor. Varsayılan ayarlar benim için yeterli.
ecerulm

setw -g c0-change-interval 100 ve setw -g c0-change-trigger 250 benim için hiç farketmez. Ben tmux-1.8 kullanıyorum. Ben yanlış bir şey mi yaptım?
solotim

@solotim benim tmux 1.9a'da çalışıyor ancak ekledim set-window-option -g ... Benimkine .tmux.conf.
polym

3
Görünüşe göre, bunlar tmux 2.2'de kaldırılmıştır. :(
Martin C. Martin

20

Hala bu sorunu Ubuntu 12.10'daki tmux 1.6-2'de yaşıyorum. Bulduğum bir geçici çözüm, oturumdan ayırmak (önek + d) ve ardından yeniden taramaktır ( tmux attach, hızlı bir kabuk takma adı için iyi bir aday). Tmux aslında kaputun altında tepki veriyor gibi görünüyor - işleminizin gerçekten ctrl-c ile öldürüldüğünü onaylayabilirsiniz --- bu sadece engelleyen çizim. Ayırma hemen çalışır ve yeniden taktığınızda çizim sonuna kadar atlanır.


Geçici çözüm iyi. Aslında her şey işe yarıyor gibi görünüyor, yarılmalar arasında geçiş bile yapılıyor.
jmiserez

1
Bu olmalı tmux attach, sağ?
pandubear

Oops, haklısın. Sabit.
Jack O'Connor

2
Ve eğer ayıramazsanız, ör. Makrodan emin değilim, sadece yeni bir terminal penceresi açın ve tmux attach.
mahemoff


5

Ne yazık ki, hız sınırlaması için c0- * seçenekleri tmux 2.1 sürümünden kaldırıldı ( değişiklik günlüğü ). Bildiğim kadarıyla, oran sınırlamasını özelleştirmenin tek yolu kaynak kodunda (tmux.h) onu etkileyen değişkenleri güncellemektir:

" READ_SIZE, bir pty'den (olay yüksek filigranı) tutulacak maksimum veri büyüklüğüdür. READ_BACKOFF, pty okunmadan önce bir tty'ye gönderilmeyi bekleyen veri miktarıdır. READ_TIME, bir tty READ_BACKOFF değerinin üzerindeyse bir sonraki okumadan (mikrosaniye cinsinden) önce ne kadar süreyle geri çekileceğidir. "

Varsayılanları nerede bulacaksınız: (tmux v2.2'den itibaren):

#define READ_SIZE 1024
#define READ_BACKOFF 512
#define READ_TIME 100

1
Tmux v2.3'te belirtilen değişkenler mevcut değildir.
bergercookie

4

Cevap https://superuser.com/a/589896/311481 iyi çalışıyor. Aşağıdaki değerleri kullanıyorum:

setw -g c0-change-trigger 10
setw -g c0-change-interval 250

Başka bir ipucu: Eğer tmux içerisinde ssh kullanıyorsanız, bunun yerine mosh kullanın: http://mosh.mit.edu/ Programların çıktısını görüntülemek için daha akıllı davranır. Uygun olduğunda son ekran bırakma ara maddelerini göstermeye çalışır. Yani tmux, içinde mosh seansları bulunan çok sayıda çıktı üretildiğinde donmaz.

SSH'nin aksine, Mosh'un UDP tabanlı protokolü paket kaybını incelikle ele alıyor ve kare hızını ağ koşullarına göre ayarlıyor. Mosh ağ arabelleklerini doldurmuyor, bu nedenle Control-C her zaman kaçak süreci durdurmak için çalışıyor.

SSP [kullananları senkronize eden Devlet Senkronizasyon Protokolü] nesne katmanında çalıştığından ve senkronizasyon hızını (yani kare hızını) kontrol edebileceğinden, uygulamadan aldığı her baytı göndermesi gerekmez. Bu, Mosh'un çerçeveleri ağ arabelleklerini doldurmayacak, bağlantının duyarlılığını koruyacak ve Control-C'nin her zaman hızlı çalışmasını sağlayacak şekilde düzenleyebileceği anlamına geliyor. Her baytı göndermesi gereken protokoller bunu yapamaz.


0

Farklı terminal emülatörünü deneyin. RedHat 6.5’de, konsole (KDE) donma sorunu yoktur (tmux 2.3 ve master); Bununla birlikte, xterm ve gnome-terminal hem kötü donma yaşıyor.


Ancak, tmux 2.2, her üç terminal emülatöründe donmadan bile sorunsuz çalışır.
kko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.