Bash
哪個程序負責將 Ctr+C 映射到 systemd+agetty+login+bash 中的 intr 信號?
我正在嘗試閱讀原始碼以了解哪個程序負責這些映射,但我仍然無法弄清楚。誰能給我一個關於哪個程式碼與它相關的提示?
沒有程序負責此映射。這是一個設備驅動函式,是核心的一部分,
ctrl-c
預設使用。
ctrl-c
由 tty(或 pty)設備映射到SIGINT
,並將發送到控制終端的前台程序。Systemd 將 agetty 連接到 tty 設備並啟動它,然後 agetty 初始化 tty 設備(使用 stty 或 tcsetattr 的系統呼叫版本)並等待輸入,最終執行 exec() 登錄。
例如,如果使用 tcsetattr,它會將 termios 結構應用於 tty,其中包括
c_cc
數組,其中包括 tty 映射到動作(包括行編輯和信號和其他東西)的特殊字元,包括VINTR
預設為ctrl-c
,和還設置允許此類字元由 tty 解釋的模式標誌。一段時間後,應用程序(如 bash 或 vim 或 emacs)也將操縱 termios 並更改模式位以可能禁用行編輯字元(然後模擬它們),甚至禁用部分或全部中斷字元,以便它們可以逐字閱讀並根據應用程序的需要使用。