키 입력을 담당하는 터미널이나 셸이 있습니까? [복사]

키 입력을 담당하는 터미널이나 셸이 있습니까? [복사]

터미널이 CTRL+C 또는 CTRL+D와 같은 키 입력을 위한 핸들러인지 셸인지 정확히 모르겠습니다.

키를 누르면 다음과 같은 생각이 듭니다.

여기에 이미지 설명을 입력하세요.

키를 누르면 키는 셸에 의해 처리됩니다. 쉘은 키를 해석하고 필요한 모든 작업을 수행합니다. 키를 CTRL + C누르거나 화면을 지울 때 신호를 보내는 CTRL + L등의 작업을 수행할 수 있습니다. 따라서 쉘은 프로그램 입력의 중개자 역할을 합니다. 입력은 쉘에서 프로그램의 표준 입력으로 제공됩니다.

프로그램의 표준 출력은 셸로 이동한 다음 출력을 터미널, 파일 또는 파이프로 리디렉션합니다.

터미널은 키 입력 바이트를 쉘로 보냅니다.

내가 맞나요?

답변1

설마. 신호 등은 터미널 드라이버에 의해 처리되므로 쉘은 사용자가 리터럴 ctrl-C를 입력했는지 또는 kill다른 창에서 동일한 신호를 보냈는지 실제로 알지 못합니다 .

Keystrokes -> Terminal -> Terminal driver -> Foreground process

쉘이 포그라운드 프로세스가 아닌 경우(예를 들어 대화형 프로그램이나 실제로 포그라운드 프로세스를 시작하는 데 사용할 때) 프로그램은 터미널 드라이버로부터 키보드 입력과 모든 신호를 받습니다.

기본적으로 표준 입력은 터미널에서 나오지만 예를 들어 파일이나 네트워크 스트림에서 입력이 리디렉션되는 쉘을 실행할 수 있으며 쉘은 실제로 차이점을 알지 못합니다. 마찬가지로 쉘은 터미널 관련 여부에 관계없이 하위 프로세스에 대한 표준 입력, 출력 및 오류 스트림을 리디렉션할 수 있습니다.

관련 정보