
CTRL^C가 SIGINT를 프로세스에 정확히 보내는 방법을 알아내려고 합니다. 의사 터미널 시스템을 고려해 봅시다. 제가 알고 있는 내용(또는 알고 있다고 생각하는 내용, 하하)을 적어보고 필요한 곳에 추가/교체해 주세요.
플레이어는 다음과 같습니다
- Xterm - 이것은 키보드(X Window System 사용)에서 데이터를 읽고 이미지를 화면에 렌더링하는 사용자 공간 프로그램입니다. 키보드에서 얻은 모든 문자는 에 전달됩니다
pty master
. - 사용자 프로세스 - 터미널의 포그라운드 작업으로 실행되는 사용자 프로세스입니다. 일반적으로 Xterm이 열리면 해당 사용자의 프로세스로 bash나 다른 쉘 프로그램이 실행됩니다.
- PTY 장치 - ,
stdin
, 와 같이 사용자 프로세스가 연결되는 문자 장치입니다stdout
.stderr
프로세스에 의해 작성된 모든 내용은stdout
TTY 드라이버와 해당 회선 규칙에 의해 처리되고 입력으로 Maser 측에 전달되며 그 반대의 경우도 마찬가지입니다.
라인 규율/TTY 드라이버가 그러한 신호를 프로세스에 보내야 한다는 것을 이해하고 나면 이제 커널이 프로세스에 신호를 전달하는 방법에 신경 쓰지 않습니다. 내가 관심 있는 것은 CTRL^Z
내가 키보드를 누른 후 Xterm(이 키 누르기를 읽는 프로세스)이 이 정보를 컴퓨터에 전달하는 방법입니다.pty master
편집하다
답변해 주셔서 감사합니다. 답장을 환영합니다이 스레드나는 실제로 PTY 마스터에 글을 쓰고 0x3
슬레이브에서 무슨 일이 일어나고 있는지 확인함으로써 이것을 시뮬레이션해 보았습니다. 여러분, 답변해주실 수 있나요?
답변1
xterm
^C
에뮬레이션에 쉽게 사용할 수 있는 의사 tty 기본 장치에 문자(ASCII 3)를 쓰기 만 하면 됩니다 script
(예: xterm
기본 의사 tty를 관리하는 다른 프로그램).
{ sleep 1; printf '\x03'; } | script -qc 'trap "echo SIGINT ma tuer; exit 1" I
NT; cat' /dev/null
^CSIGINT ma tuer