터미널이 CTRL+C 또는 CTRL+D와 같은 키 입력을 위한 핸들러인지 셸인지 정확히 모르겠습니다.
키를 누르면 다음과 같은 생각이 듭니다.
키를 누르면 키는 셸에 의해 처리됩니다. 쉘은 키를 해석하고 필요한 모든 작업을 수행합니다. 키를 CTRL + C
누르거나 화면을 지울 때 신호를 보내는 CTRL + L
등의 작업을 수행할 수 있습니다. 따라서 쉘은 프로그램 입력의 중개자 역할을 합니다. 입력은 쉘에서 프로그램의 표준 입력으로 제공됩니다.
프로그램의 표준 출력은 셸로 이동한 다음 출력을 터미널, 파일 또는 파이프로 리디렉션합니다.
터미널은 키 입력 바이트를 쉘로 보냅니다.
내가 맞나요?
답변1
설마. 신호 등은 터미널 드라이버에 의해 처리되므로 쉘은 사용자가 리터럴 ctrl-C를 입력했는지 또는 kill
다른 창에서 동일한 신호를 보냈는지 실제로 알지 못합니다 .
Keystrokes -> Terminal -> Terminal driver -> Foreground process
쉘이 포그라운드 프로세스가 아닌 경우(예를 들어 대화형 프로그램이나 실제로 포그라운드 프로세스를 시작하는 데 사용할 때) 프로그램은 터미널 드라이버로부터 키보드 입력과 모든 신호를 받습니다.
기본적으로 표준 입력은 터미널에서 나오지만 예를 들어 파일이나 네트워크 스트림에서 입력이 리디렉션되는 쉘을 실행할 수 있으며 쉘은 실제로 차이점을 알지 못합니다. 마찬가지로 쉘은 터미널 관련 여부에 관계없이 하위 프로세스에 대한 표준 입력, 출력 및 오류 스트림을 리디렉션할 수 있습니다.