답변1
터미널을 제어함으로써 프로세스는 어떤 프로세스 그룹이 (동일한 세션 내에서) 포그라운드 프로세스 그룹인지 커널에 알릴 수 있습니다. 터미널에 전경 프로세스 그룹이 있는 경우 Ctrl-C/Ctrl-\와 같이 터미널을 통해 전경 프로세스 그룹을 제어하여 전경 프로세스 그룹을 종료할 수 있습니다. (터미널에는 하나의 전경 프로세스 그룹만 있을 수도 있고 없을 수도 있습니다. 정확하게 말하면 터미널은 하나의 프로세스 세션에만 연관될 수 있습니다.)
제어 터미널을 사용하면 stdin을 다른 위치/파일로 리디렉션한 경우에도 여전히 제어 터미널에서 읽고 쓸 수 있습니다 /dev/tty
. 이 특수 파일은 커널에서 현재 프로세스의 제어 터미널과 동의어입니다. 프로세스에 연결된 제어 터미널이 없으면 이 파일을 열 수 없습니다. 이 파일로 무엇을 할 수 있나요? 예를 들어, 일부 프로그램에서는 로그인이나 암호화를 위한 프로그램과 같은 특정 작업을 수행하기 전에 사용자에게 비밀번호를 입력하도록 요구합니다. 이러한 프로그램은 사용자가 표준 입력에서 비밀번호를 입력하는 것을 방지할 수 있습니다. 즉, 표준 입력을 임의의 파일로 리디렉션하더라도 사용자는 여전히 입력을 기다리고 있습니다. 그 이유는 읽기를 위해 모두 /dev/tty를 열기 때문입니다.
요약하자면, 커널은 터미널을 제어함으로써 누군가 필요할 경우 터미널 생성 신호와 터미널 입력을 전달할 위치를 알 수 있습니다. 그게 다야.
따라서 프로세스가 터미널에 의해 제어되기를 원하지 않고 "/dev/tty"에서 읽기/쓰기를 원하지 않는 경우(대부분의 데몬과 마찬가지로) 제어 터미널과 연결할 필요가 없습니다. 그러나 셸 내에서 시작된 일반 프로세스는 셸 세션의 구성원이고 제어 터미널이 셸 시작 시 설정되었기 때문에 항상 제어 터미널과 연결됩니다. (실제로 랜덤 프로세스는 단말을 제어 단말로 접속할 수 없고 오직 세션 리더 프로세스만 접속할 수 있다.)