端末が CTRL+C や CTRL+D などのキーストロークのハンドラなのか、シェルなのかはわかりません。
キーを押すと次のような気がします。
キーを押すと、キーはシェルによって処理されます。シェルはキーを解釈し、必要なすべての操作を実行します。キーをCTRL + C
押すか、画面を消去したときに信号を送信するCTRL + L
などの操作を実行できます。したがって、シェルはプログラム入力の仲介者として機能します。入力は、シェルからプログラムの標準入力として提供されます。
プログラムの標準出力はシェルに移動し、出力を端末、ファイル、またはパイプにリダイレクトします。
端末はキー入力バイトをシェルに送信します。
私は正しいですか?
答え1
まさか。信号などは端末ドライバによって処理されるため、シェルは実際にユーザーがリテラルctrl-Cを入力したのか、kill
別のウィンドウで同じ信号を送信したのかを知りません。
Keystrokes -> Terminal -> Terminal driver -> Foreground process
シェルがフォアグラウンドプロセスでない場合(たとえば、対話型プログラムまたは実際にフォアグラウンドプロセスを開始するために使用する場合)、プログラムはターミナルドライバからキーボード入力とすべての信号を受け取ります。
デフォルトでは、標準入力は端末から出てきますが、たとえばファイルやネットワークストリームから入力がリダイレクトされるシェルを実行できます。同様に、シェルは、端末に関係するかどうかにかかわらず、子プロセスの標準入力、出力、およびエラーストリームをリダイレクトできます。