CTRL^Cは処理のために信号を正確にどのように渡しますか?

CTRL^Cは処理のために信号を正確にどのように渡しますか?

CTRL^C が SIGINT をプロセスに正確に送る方法を見つけようとしています。疑似端末システムを考えてみましょう。私が知っている内容(または知っていると思う内容、ハハ)を書いて、必要な場所に追加/交換してください。

プレイヤーは次のとおりです

  • Xterm - これはキーボード(X Window Systemを使用)からデータを読み取り、画面に画像をレンダリングするユーザースペースプログラムです。キーボードから得られたすべての文字はに渡されますpty master
  • ユーザー・プロセス - 端末のフォアグラウンド・ジョブとして実行されるユーザー・プロセス。通常、Xtermが開くと、そのユーザーのプロセスでbashまたは他のシェルプログラムが実行されます。
  • PTYデバイス - 、、stdinなどのユーザープロセスが接続されている文字デバイスstdoutstderrプロセスによって作成されたすべての内容は、stdoutTTYドライバとその回線規則によって処理され、入力としてMaser側に渡され、その逆も同様です。

ライン規約/ TTYドライバがそのようなシグナルをプロセスに送信する必要があることを理解した後、カーネルがプロセスにシグナルを渡す方法を気にしません。私が興味を持っているのは、私がCTRL^Zキーボードを押した後にXterm(このキーを押すのを読むプロセス)がこの情報をコンピュータに渡す方法です。pty master

編集する

答えてくれてありがとう。返信を歓迎しますこのスレッド私は実際にPTYマスターに書いて、0x3スレーブで何が起こっているのかを確認することでこれをシミュレートしました。皆さん、答えていただけますか?

答え1

xterm^Cエミュレーションに簡単に使用できる擬似ttyベースデバイスに文字(ASCII 3)を書き込むだけですscript(たとえば、xtermデフォルトの擬似ttyを管理する他のプログラム)。

{ sleep 1; printf '\x03'; } | script -qc 'trap "echo SIGINT ma tuer; exit 1" I
NT; cat' /dev/null
^CSIGINT ma tuer

関連情報