가압 C하면서 Ctrl가압하는 단말기 에뮬레이터 keyrelease X11 이벤트 뒤에 누르기를 보낸다.
이 이벤트 (일반적으로 키 누르기)에 따라 터미널 에뮬레이터는 ^C
의사 -tty 장치의 마스터 측에있는 파일 설명자에 0x3 바이트 ( )를 씁니다 .
isig
장치 의 termios 설정이 켜져 있고 intr
설정이 0x3 바이트로 설정되어 있으면 커널은 터미널 장치 의 포 그라운드 프로세스 그룹 의 모든 구성원 (pty 장치에 저장된 다른 속성 )으로 SIGINT 신호를 보냅니다 . 이 경우 pty의 슬레이브 쪽에서 0x3 바이트를 읽을 수 없습니다.
일반적으로 setpgid()
쉘 작업에 대한 프로세스 그룹 (with )을 작성 하고 포 그라운드로 넣을 ( tcsetpgrp()
pty 장치의 해당 속성을 설정 하기 위해) 결정하는 대화식 쉘입니다 .
예를 들어 대화식 쉘 프롬프트에서 실행할 때 :
foo | bar
쉘은 두 개의 과정에 새로운 프로세스 그룹을 시작 (여기서는 실행 foo
및 bar
파이프와 그 표준 입력 / 출력에 접속 한 후) 및 그 전경 둔다 기이다. Ctrl-C를 누르면 두 프로세스 모두 SIGINT를 수신합니다.
에:
foo | bar &
동일하지만 프로세스 그룹이 포 그라운드로 배치되지 않습니다 (쉘도 대기하지 않으므로 다른 명령을 입력 할 수 있습니다). 이러한 프로세스는 Ctrl-C에서 SIGINT를 얻지 못하지만 tty 장치에서 읽으려고하면 일시 중지 될 수 있습니다.
추가 자료 : 각 PTY (Pseudo-Terminal) 구성 요소 (소프트웨어, 마스터 측, 슬레이브 측)의 책임은 무엇입니까?