Unix 계열 시스템에서 의사 터미널이 별도의 기능인 이유는 무엇입니까? 터미널 에뮬레이터를 구현하기 위해 파이프 쌍이나 FIFO보다 나은 점은 무엇입니까?
답변1
터미널 다른 형태의 I/O와 달리 터미널 에뮬레이터는 자신을 터미널로 표시해야 합니다.
터미널(의사 터미널 포함)에는 줄 길이 및 지원되는 제어 시퀀스와 같은 특정 속성이 있습니다. 프로그램은 일반적으로
ls
출력을 터미널로 보낼지 여부를 결정하기 위해 이를 요청한 다음 터미널과 일치하도록 색상과 탭을 조정할 수 있습니다.이것을 테스트할 수 있습니다.
ls | cat
별도의 열을 제공하지 않습니다. 의사 터미널은 터미널 에뮬레이터에 적절한 값을 전달하는 데 사용됩니다.또 다른 예로, 보안상의 이유로
sudo
프로그램은ssh
비밀번호를 터미널에서 직접 읽고 읽을 수 없으므로 파이프로 연결할 수 없습니다.터미널은 프로세스를 제어하는 데 사용됩니다. 을 누르면
^C
단말기에서SIGINT
다음으로 전송됩니다.포그라운드 프로세스. 이것이 터미널의 역할입니다. 즉, 원활하게 작동하려면^C
터미널이 필요하다는 뜻입니다.마찬가지로 터미널을 일시 중지하면(또는 최신 시스템에서는 터미널 에뮬레이터 창을 닫는 경우)
SIGHUP
해당 터미널과 관련된 모든 프로세스로 전송됩니다.의사 터미널은 이를 처리할 수 있지만 한 쌍의 파이프는 처리할 수 없습니다.
일반적으로 데몬을 제외한 모든 프로세스에는 제어 터미널이 있습니다.
ps
어떤 프로세스가 어떤 터미널에 속하는지 알려주는 데 사용할 수 있습니다 .