Keyboard-Shortcuts

Linux 中的 C SIGINT 信號

  • June 2, 2019

我想對鍵盤鍵進行特定組合以終止程序 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 設置一個信號處理程序,該處理程序計算它被呼叫的次數並第三次終止程序。如果兩者之間有正常輸入,您可能需要重置計數器。

¹不是終端仿真器,它是處理所有終端的作業系統的通用部分。

²我只解釋簡單的情況。這不是關於終端驅動程序如何工作的論文。

引用自:https://unix.stackexchange.com/questions/522333