
답변1
세게 때리다했다터미널인 표준 입력(stdin)에서 입력을 가져옵니다.
터미널은 둘 중 하나에 있을 수 있습니다.모드:날것의또는요리(“문자 모드” 및 “라인 모드”라고도 함, “raw” 및 “cooked”라는 용어는 Unix 세계에서 주로 사용됩니다.) (“cooked”라는 단어는 “raw”와 반대되는 말장난으로 도입되었습니다. ). 원시 모드에서는 터미널이 입력을 즉시 애플리케이션에 전송합니다. Cooked 모드에서 터미널은 전체 라인을 읽고 (매우 원시적인) 라인 편집 메커니즘을 제공하며 사용자가 를 누를 때만 애플리케이션에 데이터를 전송합니다 Enter.
터미널은 요리 모드에서 시작됩니다. Bash와 같이 입력에 대한 더 많은 제어를 원하는 애플리케이션은 사용자가 명령을 입력하기를 기다리는 동안 터미널을 원시 모드로 설정합니다.
답변2
나는 터미널이 키보드를 통해 수신된 텍스트의 모든 줄을 버퍼링하므로 터미널 장치 파일에 첨부된 파일 설명자(예: fd0)가 있는 모든 프로그램이 터미널이 "전송"할 때까지 해당 줄의 텍스트를 볼 수 없다고 믿습니다. - 를 누르면 이런 일이 발생합니다 Enter.
(쉘의 라인 편집자가 이 문제를 어떻게 해결하는지 - 잘 모르겠지만, 를 누르기 전에 확실히 텍스트를 확인합니다 Enter)
또한 쉘이 하위 프로세스(이 경우 ping
)를 시작하면 하위 프로세스가 실행될 때 일시 중지/중 상태가 됩니다 wait
. 따라서 터미널이 텍스트를 보류하지 않더라도 쉘은 이를 무시합니다. 자식 프로세스를 위한 것입니다.
따라서 화면에 나타나는 텍스트는 다음과 같습니다.단말기그것을 표시하고 있지만 자식이 종료되고 쉘이 "깨어나기" 전까지는 그것을 캡처하고 아무것도 하지 않는 프로그램이 없습니다. 그런 다음 텍스트는 쉘 라인 편집기로 전송됩니다. 모든 터미널이 반드시 필요한 것은 아니라고 생각하지만 그렇게.