รายการของสัญญาณที่สร้างสถานี (เช่น Ctrl-C -> SIGINT)


30

ฉันจะหารายชื่อชุดแป้นพิมพ์ทั้งหมดที่ส่งสัญญาณใน Linux ได้ที่ไหน

เช่น:

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

2
"แป้นพิมพ์" ไม่ส่งสัญญาณใด ๆ มีระเบียบวินัยในสาย man 1 sttyค้นหาสิ่งวินัยสายแล้วอ่าน
Satō Katsura

@SatoKatsura วินัยของสายนั้นเป็นไดรเวอร์แป้นพิมพ์
Gilles 'หยุดชั่วร้าย'

@Gilles ไม่จริง ไดร์เวอร์คีย์บอร์ดนั้นเกี่ยวข้องกับการสแกนและสิ่งที่คล้ายกัน วินัยในการใช้สายเป็นกาวในระดับที่สูงขึ้นซึ่งทำให้แอปพลิเคชั่นมีมุมมองที่เป็นเอกภาพในเรื่องอื่น ๆ มากมายเช่นสายโมเด็มอะแดปเตอร์ USB เป็นอนุกรมอุปกรณ์ HID ฯลฯ
Satō Katsura

@SatoKatsura มันเป็นส่วนหนึ่งของระบบปฏิบัติการที่ทำให้แอพพลิเคชั่นและคีย์บอร์ดมีความสับสน มันเป็นส่วนหนึ่งของไดรเวอร์แป้นพิมพ์ ด้วยเทอร์มินัลฮาร์ดแวร์ (เช่น vt100) การเปลี่ยนคีย์บอร์ดอินพุตเพียงอย่างเดียวที่ทำโดยคอมพิวเตอร์ซึ่งต่างจากเทอร์มินัลนั้น
Gilles 'ดังนั้นหยุดความชั่วร้าย'

คำตอบ:


27

วินัยของบรรทัด Linux N_TTY ส่งสัญญาณที่แตกต่างกันสามสัญญาณเท่านั้น: SIGINT, SIGQUIT และ SIGTSTP โดยค่าเริ่มต้นตัวควบคุมต่อไปนี้จะสร้างสัญญาณ:

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

อืมแล้ว Ctrl-S และ Ctrl-Q ล่ะ? คุณมีการอ้างอิงสำหรับสิ่งนี้หรือไม่?
Tom Hale

6
ไม่มีสัญญาณเกี่ยวข้องเมื่อคุณกด Ctrl-S หรือ Ctrl-Q พวกเขาเพียงแค่เค้นการไหลของตัวละครเพื่อป้องกันไม่ให้พวกเขาไปถึงกระบวนการบริโภค ในที่สุดเมื่อบัฟเฟอร์เต็มกระบวนการผลิตจะบล็อกในการเรียกระบบการเขียนจนกระทั่ง Ctrl-Q คลายการไหลของข้อมูล โปรดทราบว่ามันเป็นเรื่องปกติสำหรับการโทรเพื่อเขียนสามารถบล็อกได้แม้ไม่มี Ctrl-S: หากกระบวนการรับช้าที่จะใช้ข้อมูลที่ส่งไปเช่นเพราะมันใช้เวลาส่วนใหญ่ในการประมวลผลเวลาที่ได้รับข้อมูลแทนที่จะอ่านข้อมูลใหม่ .
Johan Myréen

1
man stty | grep -C1 signalเป็นแหล่งเดียวสำหรับสามแหล่งนี้เป็นสัญญาณเดียวที่สร้างขึ้นโดยเทอร์มินัล
Tom Hale

@TomHale ... ยกเว้น "สัญญาณควบคุมโมเด็ม" เป็นสัญญาณไฟฟ้า :) จริงๆSIGINT, SIGQUITและSIGTSTPเป็นคนเดียวที่ "ปกติ" สัญญาณที่ส่งมาจากวินัยบรรทัด ใน BSD คุณมีสิ่งที่ชอบSIGINFOแต่ก็ไม่ได้มาตรฐาน
Satō Katsura

8

คุณสามารถใช้sttyเพื่อตรวจสอบหรือเปลี่ยนอักขระที่สร้างสัญญาณ

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

intr(ขัดจังหวะ) สร้างSIGINT, quitสร้างSIGQUIT, susp(ระงับ) SIGTSTPสร้าง stty -aจะแสดงสิ่งต่าง ๆ เช่นstart = ^Q; stop = ^S;และerase = ^?(backspace) ซึ่งไม่ส่งสัญญาณ แต่มีผลต่อเลเยอร์เทอร์มินัล

ธรรมดาsttyจะแสดงการตั้งค่าเริ่มต้นไม่และเช่นstty intr ^Qจะเปลี่ยนตัวอักษรขัดจังหวะการแทน^Q^C

ฉันคิดว่า^L(ฟีดฟอร์มหน้าใหม่) ไม่ใช่คุณลักษณะของเทอร์มินัล แต่อักขระที่มักใช้โดยแอปพลิเคชันเพื่อขอให้วาดมุมมองใหม่ตรวจสอบขนาดหน้าต่างในเวลาเดียวกัน


1
^Lมีความหมายที่แตกต่างกันสำหรับการใช้งานที่แตกต่างกัน ในส่วนcursesการใช้งานชั่น (เช่นvim, less, mutt, mcฯลฯ ) มันบังคับให้วาดฉบับสมบูรณ์ (จึงกำลังตรวจสอบขนาดของหน้าต่าง) แต่ในเปลือกหอย ( bashอื่น ๆ ) มันเป็นเพียงแค่ล้างหน้าจอ ไม่มีSIGWINCHส่วนเกี่ยวข้อง
Satō Katsura
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.