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
  • การหน่วงเวลานานขึ้นหากหน้าต่างเทอร์มินัลของฉันใหญ่ขึ้น สำหรับเทอร์มินัลแบบเต็มหน้าจอจะใช้เวลาประมาณ 15 วินาทีในการหยุดgrep -R(ไม่มีข้อโต้แย้งอื่น ๆ ) ในไดเรกทอรีหลักที่รก สำหรับเทอร์มินัลอักขระ 80 × 25 จะหยุดเกือบทันที

ฉันไม่สังเกตเห็นความแตกต่างที่มองเห็นได้ ฉันได้พยายามgrep -R "a" ~/(ไม่ได้เขียนไปยังแฟ้ม) ... และแล้วyes | nl | cut -f1 | head -9999999 > ~/file cat ~/file
Peter.O

@ Peter.O เพียงแค่ป้อน "ใช่" แล้วกด Enter tmux ของคุณจะถึงวาระ
solotim

คำตอบ:


10

tmux ตอนนี้มีตัวเลือกดังต่อไปนี้:

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

คุณสามารถตั้งค่าสำหรับสิ่งเหล่านี้ซึ่งจะทำให้ ^ C และเพื่อน ๆ พิมพ์ได้ง่ายขึ้น ดูman tmux:

ตัวเลือกทั้งสองนี้กำหนดค่ารูปแบบการ จำกัด อัตราง่ายๆสำหรับบานหน้าต่าง หาก tmux เห็นมากกว่าลำดับทริกเกอร์ C0 ที่ปรับเปลี่ยนหน้าจอ (ตัวอย่างเช่น carriage return, linefeeds หรือ backspaces) ในหนึ่งมิลลิวินาทีมันจะหยุดการปรับปรุงบานหน้าต่างทันทีและแทนที่มันทั้งหมดทุกช่วงเวลามิลลิวินาที ซึ่งช่วยป้องกันการส่งออกที่รวดเร็ว (เช่นใช่ (1)) เทอร์มินัลครอบงำ ค่าเริ่มต้นคือทริกเกอร์ 250 และช่วงเวลา 100 ทริกเกอร์เป็นศูนย์จะปิดใช้งานการ จำกัด อัตรา


นี่ควรเป็นโซลูชันที่ได้รับการยอมรับเพราะใช้งานได้
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 ตามที่อธิบายไว้ข้างต้น แต่ไม่สามารถใช้งานได้อีกต่อไป นี่คือการเปลี่ยนแปลงคอมไพล์ด้วยโซลูชันที่พยายามทำใหม่: 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.