터미널을 시작하고 실행 파일을 호출하면(단순화를 위해 라인 기반으로 가정) 실행 파일에서 해당 명령에 대한 응답을 받게 됩니다. 이것이 사용자에게 어떻게 인쇄됩니까? 터미널이 비슷한 일을 합니까 pexpect
? (출력 폴링) 또는 무엇? 인쇄할 출력에 대해 어떻게 알림을 받나요? 터미널에서 프로그램을 시작하는 방법은 무엇입니까? (파이썬의 os.fork()와 비슷합니까?) 터미널이 어떻게 작동하는지 혼란스럽습니다. 일부 터미널 에뮬레이터를 가지고 놀았지만 여전히 이 모든 마법이 어떻게 작동하는지 이해하지 못합니다. konsole(kde) 및 yakuake(아마도 konsole 사용)의 소스를 보고 있지만 이 모든 마법이 어디서 발생하는지 모르겠습니다.
답변1
"터미널을 열면" xterm, gnome-terminal, lxterm, konsole 등과 같은 터미널 에뮬레이터 프로그램이 시작됩니다.
터미널 에뮬레이터가 가장 먼저 하는 일은의사 터미널(종종 pseudo-tty 또는 줄여서 pty라고 함). pty는 쌍이다캐릭터 장치 파일: pty master(터미널 에뮬레이터가 열리는 쪽) 및 pty Slave(터미널 내에서 실행되는 프로그램이 열리는 쪽). 대부분의 최신 독립형 시스템에서 호스트는/dev/ptmx
(모든 터미널 에뮬레이터가 열려 있음) 슬레이브 장치는 입니다 /dev/pts/NUMBER
. 의사 터미널의 커널 드라이버는 각 슬레이브 장치의 마스터 장치를 제어하는 프로세스를 추적합니다. 터미널 에뮬레이터는 다음을 통해 액세스할 수 있습니다.I/W 제어기본 장치에서.
터미널 에뮬레이터가 기본 장치를 열면 하위 프로세스(일반적으로 셸이지만 터미널 에뮬레이터를 호출한 사용자가 결정함)가 시작됩니다. 에뮬레이터는 프로그램을 호출하는 일반적인 방법으로 이 작업을 수행합니다.
하위 프로세스(또는 다른 프로세스)가 pty 슬레이브 프로세스에 쓸 때 에뮬레이터는 pty 마스터 프로세스에 대한 입력을 확인합니다.
대신 에뮬레이터가 마스터 장치에 쓸 때 슬레이브 장치의 입력으로 처리됩니다.
Expect는 정확히 같은 방식으로 작동합니다. Expect 및 xterm과 같은 터미널 에뮬레이터의 차이점은 프로그램에 제공하는 입력(스크립트 대 키보드 입력)을 얻는 위치와 출력을 처리하는 방법(로그 파일 또는 파서 대 창에 텍스트 그리기)입니다.
답변2
처음에는 멍청한 터미널만 있었습니다. 처음에는 실제로 텔레타이프(전기 타자기와 비슷하지만 종이 두루마리가 있는)였지만(따라서 /dev/tty - TeleTYpers) 나중에 화면+키보드 콤보가 등장했습니다. 컴퓨터는 터미널에 해당 문자를 쓰라는 명령을 다시 보냅니다(즉, 터미널에는 기본 에코가 없으며 컴퓨터는 사용자가 터미널에 입력하는 내용을 쓰도록 터미널에 명령해야 합니다). 이것이 이유 중 하나입니다. Unix의 많은 부분이 중요합니다. 명령이 모두 너무 짧습니다. 대부분의 터미널은 직렬 회선을 통해 연결되지만 컴퓨터에 직접 연결된 터미널이 (적어도) 하나 있습니다(보통 같은 방에 있음). 이것이 바로 콘솔입니다. 소수의 사용자만이 "콘솔"(일반적으로 단일 사용자 모드에서 사용할 수 있는 유일한 "터미널")에서 작업하도록 신뢰됩니다.
xterm
나중에는 화면과 그래픽 화면 카드, 키보드, 마우스 및 X 서버만 실행할 수 있는 간단한 프로세서를 갖춘 그래픽 터미널(소위 "x터미널", 프로그램과 혼동하지 말 것)도 있었습니다. 이들은 자체적으로 계산을 수행하지 않으므로 X 클라이언트는 연결된 컴퓨터에서 실행됩니다. 일부에는 하드 드라이브가 있지만 네트워크를 통해 부팅할 수도 있습니다. 개인용 컴퓨터가 너무 저렴하고 강력해지기 전인 1990년대 초반에 인기가 있었습니다.
나중에 "지능형" 또는 "지능형" 터미널이 등장했습니다. 스마트 단말기가 가능합니다프로세스사용자 입력(문자 삽입, 단어 삭제 사용, 문자 사용 또는 삭제 등 쉘 프롬프트에서 행 편집 Ctrl-W
)Ctrl-H
Backspace
다른 사람의 도움에 의존하지 마십시오컴퓨터에서. 반면에 초기의 덤 터미널은 이러한 라이브 라인 편집을 수행할 수 없었습니다. 덤 터미널에서는 사용자가 키를 누르면 터미널이 생성된 키 코드를 컴퓨터에 전송/위임하여 처리합니다. 처리 후 컴퓨터는 결과를 표시하기 위해 덤 터미널로 다시 보냅니다. 예를 들어 키를 누르면 Ctrl-W
컴퓨터에 키코드가 전송되고 컴퓨터는 이를 "마지막 단어 제거"로 해석하므로 컴퓨터는 해당 텍스트 변경 사항을 처리하고 간단히 표시해야 할 출력을 멍청한 터미널에 제공하십시오).
xterm
"터미널 에뮬레이터"(Windows Phone 또는 Windows Phone과 같은 프로그램으로 여는 "터미널 창")는 konsole
이러한 스마트 터미널의 기능을 모방하려고 시도합니다. (Windows)와 같은 프로그램 PuTTY
도 이러한 스마트 터미널 에뮬레이터를 에뮬레이션할 수 있습니다.
PC의 경우 "콘솔"(키보드 + 화면)과 "컴퓨터"는 하나의 장치에 가깝고 "가상 터미널"(Linux에서는 Alt+F1 ~ Alt+F6 키)을 사용할 수 있지만 이는 이전 터미널을 에뮬레이트하기도 합니다. 단말기. 물론 Unix/Linux가 점점 더 단일 사용자가 사용하는 데스크톱 운영 체제로 변해감에 따라 이전 사용자가 직렬 회선을 통해 연결된 터미널을 사용했던 "콘솔"에서 이제 대부분의 작업을 수행할 수 있습니다.
물론 프로그램을 시작하는 것은 쉘입니다. C에서 시스템 호출을 사용하여 fork
환경 설정을 사용하여 자신을 복사한 다음 exec
시스템 호출을 사용하여 이 복사본을 실행하려는 명령으로 변환합니다. 명령이 완료될 때까지 쉘은 중단됩니다(명령이 백그라운드에서 실행되고 있지 않은 경우). 명령은 다음 설정을 상속하므로표준 입력,표준 출력그리고표준 에러쉘에서 이 명령은 터미널 화면에 쓰고 터미널 키보드로부터 입력을 받습니다.