ใช่โปรแกรมที่ทำงานผ่าน SSH จะขึ้นอยู่กับเอาต์พุตของมันที่อื่น หากการเชื่อมต่อช้าออกจะต้องบัฟเฟอร์ที่ใดที่หนึ่งและบัฟเฟอร์ไม่สามารถไม่มีที่สิ้นสุดดังนั้นโปรแกรมจะต้องปิดกั้นหากพวกเขาจะเต็ม
โปรดทราบว่าผลลัพธ์อาจไม่จำเป็นต้องไปที่เทอร์มินัล: ลองใช้งานบางอย่างเช่น
ssh user@somewhere "cat file.txt" > file.txt
ซึ่งจะมีผลในการคัดลอกไฟล์ เพื่อการทำงานอัตราการส่งออกของแมวจะต้องตรงกับการเชื่อมต่อ: มันชัดเจนว่าการสูญเสียบางส่วนของเอาท์พุทจากตรงกลางจะไม่เป็นที่ยอมรับ
หน้าจอจะเปลี่ยนสถานการณ์ที่จะทำหน้าที่เหมือนเทอร์มินัลและจะบันทึกสิ่งที่ควรแสดง "ในหน้าต่างเทอร์มินัล" (รวมทั้งสโครลย้อนกลับ) ไม่จำเป็นต้องจำทุกสิ่งที่โปรแกรมของคุณส่งออกเฉพาะส่วนที่จะพอดีกับ "หน้าต่าง" และสกรอลล์กลับ ตามค่าเริ่มต้นหน้าจอจะรอการเชื่อมต่อที่ช้า (ปิดกั้นโปรแกรม) แต่สามารถกำหนดค่าให้ตรวจจับการเชื่อมต่อที่ค้างอยู่ได้โดยตั้งค่า "nonblock on"
จากหน้าคน:
nonblock [เปิด | ปิด | numsecs]
บอกหน้าจอวิธีจัดการกับส่วนต่อประสานกับผู้ใช้ (จอแสดงผล) ที่หยุดรับเอาต์พุต สิ่งนี้สามารถเกิดขึ้นได้หากผู้ใช้กด ^ S หรือการเชื่อมต่อ TCP / โมเด็มได้รับการตัด แต่จะไม่ได้รับ Hangup หากไม่มีการปิดกั้นหน้าจอ (นี่คือค่าเริ่มต้น) จะรอจนกระทั่งจอแสดงผลรีสตาร์ทเพื่อยอมรับเอาต์พุต หากไม่มีการปิดกั้นหน้าจอจะรอจนกระทั่งถึงระยะหมดเวลา (จะถือว่าเป็น 1 วินาที) หากหน้าจอยังไม่ได้รับตัวอักษรหน้าจอจะพิจารณาว่า "ถูกบล็อก" และหยุดส่งตัวอักษรไปที่หน้าจอนั้น หากในบางครั้งมันรีสตาร์ทเพื่อยอมรับตัวอักษรหน้าจอจะปลดบล็อคจอแสดงผลและแสดงเนื้อหาหน้าต่างที่ได้รับการอัพเดตใหม่
การตัดการเชื่อมต่อแตกต่างจากการเชื่อมต่อที่ช้า ธรรมดา SSH ไม่สามารถกู้คืนได้โดยอัตโนมัติดังนั้นโปรแกรมของคุณจะได้รับ SIGHUP ในทางกลับกันหน้าจอจะตรวจจับการตัดการเชื่อมต่อถอดและถอยกลับไปที่การบัฟเฟอร์ในพื้นที่จนกว่าหน้าจอจะถูกแนบใหม่ สิ่งนี้จะไม่บล็อกโปรแกรมที่กำลังทำงานอยู่
(การตั้งค่าnonblock 1
ของคุณ.screenrc
เป็นสิ่งสำคัญหากคุณเรียกใช้บางอย่างเช่น irssi ที่จะสร้างผลลัพธ์อย่างต่อเนื่อง แต่ยังคงต้องพูดคุยกับเครือข่ายในเวลาเดียวกันการปิดกั้นจะนำไปสู่การตัดการเชื่อมต่อจาก IRC ซึ่งน่ารำคาญอย่างยิ่ง ... )