제어 터미널의 목적은 무엇입니까?

제어 터미널의 목적은 무엇입니까?

터미널에서 프로그램을 열고 이를 세 개의 파일로 리디렉션한다고 가정 해 stdin보겠습니다 .stdoutstderr

프로그램이 더 이상 출력을 터미널로 보내지 않고 더 이상 터미널에서 입력을 받지 않더라도 프로그램에는 여전히 터미널에 대한 "링크"가 있습니다. 프로그램이 "링크된" 터미널을 호출합니다.제어 터미널, 다음 그림은 이를 보여줍니다.

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

내 질문은: 제어 터미널의 용도는 무엇입니까? 제 생각에는 제어 터미널을 사용하여 프로그램에 신호를 보낼 수 있다는 것입니다(예: ) Ctrl+C.

제어 터미널을 다른 용도로 사용하나요?

답변1

터미널을 제어함으로써 프로세스는 어떤 프로세스 그룹이 (동일한 세션 내에서) 포그라운드 프로세스 그룹인지 커널에 알릴 수 있습니다. 터미널에 전경 프로세스 그룹이 있는 경우 Ctrl-C/Ctrl-\와 같이 터미널을 통해 전경 프로세스 그룹을 제어하여 전경 프로세스 그룹을 종료할 수 있습니다. (터미널에는 하나의 전경 프로세스 그룹만 있을 수도 있고 없을 수도 있습니다. 정확하게 말하면 터미널은 하나의 프로세스 세션에만 연관될 수 있습니다.)

제어 터미널을 사용하면 stdin을 다른 위치/파일로 리디렉션한 경우에도 여전히 제어 터미널에서 읽고 쓸 수 있습니다 /dev/tty. 이 특수 파일은 커널에서 현재 프로세스의 제어 터미널과 동의어입니다. 프로세스에 연결된 제어 터미널이 없으면 이 파일을 열 수 없습니다. 이 파일로 무엇을 할 수 있나요? 예를 들어, 일부 프로그램에서는 로그인이나 암호화를 위한 프로그램과 같은 특정 작업을 수행하기 전에 사용자에게 비밀번호를 입력하도록 요구합니다. 이러한 프로그램은 사용자가 표준 입력에서 비밀번호를 입력하는 것을 방지할 수 있습니다. 즉, 표준 입력을 임의의 파일로 리디렉션하더라도 사용자는 여전히 입력을 기다리고 있습니다. 그 이유는 읽기를 위해 모두 /dev/tty를 열기 때문입니다.

요약하자면, 커널은 터미널을 제어함으로써 누군가 필요할 경우 터미널 생성 신호와 터미널 입력을 전달할 위치를 알 수 있습니다. 그게 다야.

따라서 프로세스가 터미널에 의해 제어되기를 원하지 않고 "/dev/tty"에서 읽기/쓰기를 원하지 않는 경우(대부분의 데몬과 마찬가지로) 제어 터미널과 연결할 필요가 없습니다. 그러나 셸 내에서 시작된 일반 프로세스는 셸 세션의 구성원이고 제어 터미널이 셸 시작 시 설정되었기 때문에 항상 제어 터미널과 연결됩니다. (실제로 랜덤 프로세스는 단말을 제어 단말로 접속할 수 없고 오직 세션 리더 프로세스만 접속할 수 있다.)

관련 정보