Danh sách các tín hiệu được tạo cuối (ví dụ: Ctrl-C -> SIGINT)


30

Tôi có thể tìm danh sách đầy đủ các tổ hợp bàn phím gửi tín hiệu trong Linux ở đâu?

Ví dụ:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT

2
"Bàn phím" không gửi bất kỳ tín hiệu nào, kỷ luật dòng không. Tìm hiểu những gì một kỷ luật dòng là, sau đó đọc man 1 stty.
Satō Katsura

@SatoKatsura Kỷ luật dòng là loại trình điều khiển bàn phím.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Không hẳn. Trình điều khiển bàn phím xử lý các scancodes và tương tự. Kỷ luật dòng là một loại keo cấp cao hơn giúp ứng dụng có một cái nhìn thống nhất đối với nhiều thứ khác, như các dòng modem, bộ điều hợp nối tiếp USB, thiết bị HID, v.v.
Satō Katsura

@SatoKatsura Đây là một phần của hệ điều hành nằm giữa ứng dụng và bàn phím. Nói cách khác, đó là một phần của trình điều khiển bàn phím. Với thiết bị đầu cuối phần cứng (như vt100), đó là chuyển đổi duy nhất của đầu vào bàn phím được thực hiện bởi máy tính trái ngược với thiết bị đầu cuối.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


27

Kỷ luật dòng N_TTY của Linux chỉ gửi ba tín hiệu khác nhau: SIGINT, SIGQUIT và SIGTSTP. Theo mặc định, các ký tự điều khiển sau đây tạo ra các tín hiệu:

  • Ctrl+ C- SIGINT
  • Ctrl+ \- SIGQUIT
  • Ctrl+ Z- SIGTSTP

Hmm, còn Ctrl-S và Ctrl-Q thì sao? Bạn có một tài liệu tham khảo cho điều này?
Tom Hale

6
Không có tín hiệu nào liên quan khi bạn nhấn Ctrl-S hoặc Ctrl-Q. Họ chỉ điều tiết dòng chảy của các nhân vật, ngăn họ đạt được quá trình tiêu thụ. Cuối cùng, khi bộ đệm lấp đầy, quá trình sản xuất sẽ chặn trong lệnh gọi hệ thống ghi cho đến khi Ctrl-Q giải phóng luồng. Lưu ý rằng thông thường, cuộc gọi để ghi có thể chặn ngay cả khi không có Ctrl-S: nếu quá trình nhận chậm tiêu thụ dữ liệu được gửi đến nó, ví dụ: vì nó dành phần lớn thời gian để xử lý dữ liệu đã nhận thay vì đọc dữ liệu mới .
Johan Myréen

1
man stty | grep -C1 signallà một nguồn cho ba tín hiệu này là tín hiệu duy nhất được tạo bởi thiết bị đầu cuối.
Tom Hale

@TomHale ... Ngoại trừ "tín hiệu điều khiển modem" là tín hiệu điện. :) Thực sự, SIGINT, SIGQUITSIGTSTPđược chỉ "bình thường" tín hiệu được gửi bởi kỷ luật dòng. Trên BSD bạn cũng có những thứ như thế SIGINFO, nhưng đó không phải là tiêu chuẩn.
Satō Katsura

8

Bạn có thể sử dụng sttyđể kiểm tra hoặc thay đổi các ký tự tạo tín hiệu.

$ stty -a | grep -Ewoe '(intr|quit|susp) = [^;]+'
intr = ^C
quit = ^\
susp = ^Z

intr(ngắt) tạo SIGINT, quittạo SIGQUIT, susp(đình chỉ) tạo SIGTSTP. stty -acũng sẽ hiển thị những thứ như start = ^Q; stop = ^S;erase = ^? (backspace), không gửi tín hiệu nhưng ảnh hưởng đến lớp thiết bị đầu cuối.

Plain sttysẽ hiển thị các cài đặt không mặc định và ví dụ: stty intr ^Qsẽ thay đổi ký tự ngắt thành ^Qthay vì ^C.

Tôi nghĩ ^L(nguồn cấp dữ liệu, trang mới) không phải là một tính năng đầu cuối, nhưng một ký tự thường được các ứng dụng sử dụng để yêu cầu vẽ lại khung nhìn, kiểm tra lại kích thước cửa sổ cùng một lúc.


1
^Lcó một ý nghĩa khác nhau cho các ứng dụng khác nhau. Trong hầu hết cursescác ứng dụng dựa trên (ví dụ như vim, less, mutt, mc, vv) nó buộc một vẽ lại đầy đủ (do đó kiểm tra lại kích thước cửa sổ), nhưng trong vỏ ( bashvv) nó chỉ xóa màn hình. Không có SIGWINCHliên quan.
Satō Katsura
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.