Keyboard-Shortcuts
Linux 中的 C SIGINT 信號
我想對鍵盤鍵進行特定組合以終止程序 ex 我想通過按下 CTRL + C ^ 3 來終止程序(按三次 C:CTRL + CCC)。
所以基本上我想用 CTRL + CCC 替換 CTRL + C
Ctrl
+的預設行為C
是兩件事的組合。終端驅動程序¹不會傳輸此按鍵,而是向前台程序發送一個SIGINT 信號²。預設情況下,程序在收到 SIGINT 時死亡,但程序可以設置信號處理程序,然後在收到 SIGINT 時執行信號處理程序。無法將終端驅動程序配置為僅連續轉換第三個
Ctrl
+以終止前台程序。C
為此,您需要在程序中數到三。Ctrl
有兩種方法可以做到這一點,如果使用者在+之間按下其他東西,它們的行為會有所不同C
。一種方法是禁用
Ctrl
+C
發送信號並告訴終端驅動程序傳遞信號的行為。您可以通過stty intr \^-
從 shell 腳本呼叫或從 Ctcsetattr(fd, &termios)
中termios.c_cc[VINTR]
設置為來執行此操作_POSIX_VDISABLE
。然後,在程序的輸入處理循環中,當您連續看到三個Ctrl
+時退出C
。另一種方法是為 SIGINT 設置一個信號處理程序,該處理程序計算它被呼叫的次數並第三次終止程序。如果兩者之間有正常輸入,您可能需要重置計數器。
¹不是終端仿真器,它是處理所有終端的作業系統的通用部分。
²我只解釋簡單的情況。這不是關於終端驅動程序如何工作的論文。