it-swarm-vi.com

Làm thế nào để giải phóng sau khi vô tình nhấn Ctrl-S trong một thiết bị đầu cuối?

Đó là một tình huống xảy ra khá thường xuyên với tôi: sau khi tôi nhấn (với một ý định khác) Ctrl-S trong một thiết bị đầu cuối, sự tương tác (đầu vào hoặc đầu ra) với nó bị đóng băng. Nó có lẽ là một loại "khóa cuộn" hoặc bất cứ điều gì.

Làm thế nào để tôi tháo thiết bị đầu cuối sau này?

(Lần này, tôi đã làm việc với apt-Shell bên trong một bash bên trong urxvt-- không chắc ai trong số họ chịu trách nhiệm xử lý đặc biệt Ctrl-S: Tôi đã tìm kiếm lịch sử của các lệnh ngược với C-r, như thường lệ đối với đường đọc, nhưng sau đó tôi muốn "quay lại" chuyển tiếp qua lịch sử với thông thường - ít nhất là trong Emacs--C-s ( 1 , 2 , ), nhưng điều đó khiến thiết bị đầu cuối bị đóng băng. Chà, cuộn/phân trang để xem những thứ trong quá khứ vẫn hoạt động trong thiết bị đầu cuối, nhưng không có tương tác với các quy trình chạy ở đó.)

772

Ctrl-Q

Để tắt hoàn toàn điều này, hãy dán stty -ixon trong một kịch bản khởi động. Để cho phép bất kỳ phím nào khiến mọi thứ trôi chảy trở lại, hãy sử dụng stty ixany.

ps: Không phải thiết bị đầu cuối cũng không phải Shell thực hiện điều này, mà là trình điều khiển thiết bị đầu cuối của HĐH.

924
ak2

Ctrl-Q thực sự là câu trả lời Tôi nghĩ rằng tôi đã ném vào một lịch sử nhỏ về điều này quá dài để phù hợp với lề của câu trả lời đúng của ak2 .

Quay trở lại thời kỳ tăm tối, thiết bị đầu cuối là một thiết bị lớn được kết nối với thiết bị từ xa (ban đầu là thiết bị đầu cuối khác vì teletype rất dễ học cách hoạt động hơn so với phím điện báo) qua dây dài hoặc qua đường dây điện thoại có modem. Vào thời điểm Unix đang phát triển, mã ASCII đã được thiết lập tốt (mặc dù mã EBCDIC cạnh tranh từ IBM vẫn còn là một lực lượng được tính toán).

Các thiết bị đầu cuối sớm nhất giữ một bản ghi in của mỗi nhân vật nhận được. Miễn là các ký tự đến không nhanh hơn đầu in có thể gõ chúng, ít nhất. Nhưng ngay khi các thiết bị đầu cuối dựa trên CRT có thể, vấn đề nảy sinh là chỉ có khoảng 25 dòng phù hợp với CRT và 25 dòng 80 ký tự được thể hiện đủ RAM mà không ai nghĩ nghiêm túc về việc cung cấp thêm = RAM cho các ký tự đã cuộn khỏi đỉnh màn hình.

Vì vậy, một số quy ước là cần thiết để báo hiệu rằng kết thúc gửi sẽ tạm dừng để cho người đọc bắt kịp.

Mã 7-bit ASCII có 33 điểm mã dành cho các ký tự điều khiển (0 đến 31 và 127). Một số trong số đó có các mục đích thực sự được thiết lập tốt, chẳng hạn như NUL (để trống nhà lãnh đạo băng giấy để xâu chuỗi, khoảng trống và mối nối), DEL ("gạch bỏ" các ký tự trên băng giấy được chỉ định bằng cách đục tất cả bảy lỗ), BEL (Đinh!), CR, LFTAB. Nhưng bốn được xác định rõ ràng để kiểm soát chính thiết bị đầu cuối (DC1 đến DC4 aka Ctrl + Q, Ctrl + R, Ctrl + S và Ctrl + T).

Dự đoán tốt nhất của tôi là một số kỹ sư nghĩ rằng (theo cách ghi nhớ), "S" cho "Dừng" và "Q" cho "Tiếp tục" không quá tệ và được gán DC3 có nghĩa là "vui lòng ngừng gửi" và DC1 có nghĩa là "ok, tiếp tục gửi ngay bây giờ".

Ngay cả hội nghị đó cũng đã được thiết lập tốt vào thời điểm Unix rời tổ tại Bell Labs để đi ra thế giới.

Quy ước được gọi là điều khiển luồng phần mềm và cực kỳ phổ biến trong các thiết bị nối tiếp thực. Thật không dễ để thực hiện chính xác, vì nó ngăn chặn việc sử dụng một trong hai ký tự đó cho bất kỳ mục đích nào khác trong kênh liên lạc và tín hiệu Dừng phải được xử lý trước bất kỳ ký tự nhận đang chờ xử lý nào để tránh gửi nhiều hơn kết thúc nhận có thể xử lý.

Nếu thực tế, sử dụng các tín hiệu bổ sung ngoài băng từ luồng dữ liệu nối tiếp để kiểm soát luồng được ưu tiên rất nhiều. Trên các kết nối có dây trực tiếp có thể đủ khả năng cho các dây tín hiệu bổ sung, bạn sẽ thấy bắt tay phần cứng đang sử dụng, giúp giải phóng các ký tự đó cho các mục đích sử dụng khác.

Tất nhiên, cửa sổ đầu cuối ngày nay không sử dụng cổng nối tiếp vật lý thực tế, có thanh cuộn và hoàn toàn không cần bắt tay phần mềm. Nhưng quy ước vẫn tồn tại.

Tôi nhớ lại tuyên bố rằng Richard Stallman đã nhận được khiếu nại về việc ánh xạ Ctrl + S của mình để tìm kiếm gia tăng trong các bản phát hành đầu tiên của emacs và rằng anh ta khá không thông cảm với bất kỳ người dùng nào phải phụ thuộc vào kết nối được kiểm soát luồng phần mềm 7 bit.

412
RBerteig