LinuxのC SIGINT信号

LinuxのC SIGINT信号

プロセスを終了するために特定のキーボードキーの組み合わせを作成したいと思います。たとえば、CTRL+C^3(C を 3 回押す: CTRL+CCC) を押してプロセスを終了したいとします。

だから基本的にCTRL + CをCTRL + CCCに置き換えたいのです。

ベストアンサー1

Ctrl+のデフォルトの動作Cは2つの組み合わせです。ターミナルドライバ1はこのキーストロークを送信しません。SIGINT信号フォアグラウンドプロセス²として。デフォルトでは、プロセスはSIGINTを受信すると終了しますが、プロセスはシグナルハンドラを設定し、SIGINTを受信するとシグナルハンドラを実行できます。

Ctrl3番目の連続+のみ変換してCフォアグラウンドプロセスを終了するようにターミナルドライバを設定することはできません。これを行うには、プログラムで3まで数える必要があります。これを行う方法は2つあります。ユーザーがCtrl+間の他の項目を押すと、動作が異なりますC

Ctrl1つのアプローチは、+ SendSignalを無効にCし、ターミナルドライバに信号伝達の動作を知らせることです。電話してくださいstty intr \^-シェルスクリプトで、またはtcsetattr(fd, &termios)その後、プログラムの入力処理ループでtermios.c_cc[VINTR]3つの+が連続して表示されたら終了します。_POSIX_VDISABLECtrlC

もう1つのアプローチは、SIGINTのシグナルハンドラを設定し、呼び出し回数を数えて3番目にプログラムを終了することです。その間に通常の入力がある場合、カウンタをリセットする必要があるかもしれません。

1は端末エミュレータではなく、すべての端末を処理するオペレーティングシステムの一般的な部分です。
²簡単な状況を説明しています。これは、端末ドライバの動作方法に関する論文ではありません。

おすすめ記事