CTRL^C が SIGINT をプロセスに正確に送る方法を見つけようとしています。疑似端末システムを考えてみましょう。私が知っている内容(または知っていると思う内容、ハハ)を書いて、必要な場所に追加/交換してください。
プレイヤーは次のとおりです
- Xterm - これはキーボード(X Window Systemを使用)からデータを読み取り、画面に画像をレンダリングするユーザースペースプログラムです。キーボードから得られたすべての文字はに渡されます
pty master
。 - ユーザー・プロセス - 端末のフォアグラウンド・ジョブとして実行されるユーザー・プロセス。通常、Xtermが開くと、そのユーザーのプロセスでbashまたは他のシェルプログラムが実行されます。
- PTYデバイス - 、、
stdin
などのユーザープロセスが接続されている文字デバイスstdout
。stderr
プロセスによって作成されたすべての内容は、stdout
TTYドライバとその回線規則によって処理され、入力として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