각 PTY (Pseudo-Terminal) 구성 요소 (소프트웨어, 마스터 측, 슬레이브 측)의 책임은 무엇입니까?


59

tty가 어떻게 작동하는지 알아 내려고 합니다 1 (각 요소의 작업 흐름과 책임). 나는 그것에 관한 몇 가지 흥미로운 기사를 읽었지만 여전히 흐릿한 부분이 있습니다.

이것이 내가 지금까지 이해 한 것입니다.

  • 에뮬레이트 된 터미널은 /dev/ptmx의사 터미널의 마스터 부분 인에 대해 다른 시스템 호출을 수행 합니다.
  • 의사 터미널의 마스터 부분은 /dev/pts/[0-N]쓸모없는 직렬 포트에 해당 하는에 파일을 할당 하고 슬레이브 의사 터미널을 "연결"합니다.
  • 슬레이브 의사 터미널은 세션 ID, 포 그라운드 작업, 화면 크기와 같은 정보를 유지합니다.

내 질문은 다음과 같습니다.

  1. ptmx 는 슬레이브 부분을 할당하는 것 외에 다른 목적을 가지고 있습니까? 그것은 어떤 종류의 "지능"을 제공합니까 , 아니면 에뮬레이트 된 터미널 (예 : xterm)은 터미널처럼 행동하는 모든 지능을 가지고 있습니까?
  2. 왜 xterm 은 슬레이브 부분의 stdout과 stdin 만 전달하기 때문에 마스터 부분과 상호 작용해야합니까? 왜 pts 파일에서 직접 쓰고 읽을 수 없습니까?
  3. 세션 ID가 항상 하나의 pts 파일에 첨부됩니까? ps 명령을 입력 하고 동일한 / dev / pts / X에 대해 2 개의 sessionId를 찾을 수 있습니까?
  4. pts상점 은 어떤 다른 정보를 제공 합니까? Xterm은 모든 필드를 자체적으로 업데이트합니까, 아니면 ptm"지능"을 추가합니까?

1. 나는 이 사이트에 대한 몇 가지 다른 질문들 과 같이 Linus Akesson에 의해 demystified 된 TTYAndries Brouwer에 의해 리눅스 커널 게시물 에 대한 나의 이해를 바탕으로한다.

답변:


58

터미널 에뮬레이터

마스터 측은 터미널로가는 라인 (TX / RX 와이어 쌍)을 대체합니다.

터미널 은 전선 중 하나에서 수신하는 문자를 표시하고 (이 중 일부는 제어 문자이며 커서 이동, 색상 변경 등의 작업을 수행함) 입력 한 키에 해당하는 문자를 다른 와이어로 보냅니다.

xterm과 같은 터미널 에뮬레이터 는 와이어로 문자를 송수신하는 대신 파일 디스크립터에서 문자를 읽고 마스터 측으로 쓰는 것을 제외하고는 다릅니다. 일단 슬레이브 터미널을 스폰하고 쉘을 시작하면 더 이상 터치하지 않습니다. xterm은 와이어 쌍을 에뮬레이션하는 것 외에도 해당 파일 디스크립터를 통해 일부 라인 분야 특성을 마스터 측으로 변경할 수도 있습니다. 예를 들어, 크기 속성을 업데이트하여 SIGWINCH가 슬레이브 pty와 상호 작용하는 응용 프로그램으로 전송되어 변경된 크기를 알릴 수 있습니다.

그 외에 터미널 / 터미널 에뮬레이터에는 지능 이 거의 없습니다 .

터미널 장치 (pty slave와 같은)에 쓰는 것은 거기에 표시된다는 의미이며, 읽은 것은 입력 한 것이므로 터미널 에뮬레이터가 읽거나 쓰는 것은 의미가 없습니다. . 그들은 다른 쪽 끝에 있습니다.


tty 라인 훈련

의 많은 지능청각 장애 라인 규율 . 라인 규율은 해당 장치와 라인 / 와이어 (pty의 마스터 측) 사이에있는 직렬 / pty 장치 위에 푸시 된 소프트웨어 모듈 (커널에 드라이버에 있음)입니다.

직렬 회선의 다른 쪽 끝에 터미널이있을 수도 있고 네트워킹을위한 마우스 나 다른 컴퓨터도있을 수 있습니다. 예를 들어 SLIP 회선 분야를 연결하여 직렬 장치 (또는 pty 장치) 위에 네트워크 인터페이스를 가져 오거나 tty 회선 분야를 가질 수 있습니다 . tty 라인 규율은 직렬 및 pty 장치의 경우 Linux의 기본 라인 규율입니다. Linux에서는 라인 규칙을로 변경할 수 있습니다 ldattach.

tty 라인 규율을 비활성화하면 효과를 확인할 수 있습니다 stty raw -echo(bash 프롬프트 또는 다른 대화식 응용 프로그램 vi은 터미널을 필요한 모드로 설정하는 것과 같은 다른 대화식 응용 프로그램은 cat경험이 없는 바보 응용 프로그램을 사용하려고 합니다). 그런 다음 슬레이브 터미널 장치에 쓰여진 모든 것이 xterm이 읽을 수 있도록 즉시 마스터 측에 작성되며, xterm이 마스터 측에 쓴 모든 문자는 슬레이브 장치에서 즉시 읽을 수 있습니다.

회선 규율은 터미널 장치 내부 회선 편집기 가 구현되는 곳입니다. 로 예를 들어 stty icanon echo(기본값으로) 입력 할 때 a, xterm 등의 글을 a다음 제어 규칙은, 마스터에 반향 을 다시 (A하게 a하여 읽을 수를 xterm표시)하지만, 슬레이브 측에 읽을 수있는 아무것도하지 않습니다 . 당신은 백 스페이스를 입력하면 그 다음, xterm 등은 보내 ^?거나 ^H(즉, 같은 캐릭터 라인 규율을 ^?^H에 해당합니다 erase회선 제어 설정) 마스터 A를 다시 전송 ^H, space^H대한 xterm를 지우려면a방금 화면에 입력했지만 슬레이브 측에서 읽는 응용 프로그램으로 아무것도 보내지 않고 내부 라인 편집기 버퍼를 업데이트하여 a이전에 입력 한 것을 제거합니다 .

그런 다음 Enter 키를 누르면 xterm은 ^M(CR)을 전송 합니다.이 라인 규칙은 입력시 입력을 ^ J (LF)로 변환하고 지금까지 입력 한 내용을 슬레이브 측에서 읽기 위해 전송합니다 (응용 프로그램에서 읽은 /dev/pts/x내용은 LF를 포함하여 입력했지만 a삭제 한 이후 는 입력하지 않았습니다. ) 마스터 측에서는 커서를 다음 줄과 화면 시작으로 이동하기 위해 CR과 LF를 보냅니다.

라인 분야는 또한 마스터 측 등에서 문자를 수신 할 때 터미널의 포 그라운드 프로세스 그룹으로 신호를 보내는SIGINT 역할을 합니다^C .

많은 대화식 터미널 응용 프로그램 은 해당 회선 분야 의 기능 대부분을 비활성화 하여 자체 구현합니다. 그러나 어쨌든 터미널 ( xterm)은 그에 거의 관여하지 않습니다 (표시하라는 내용을 표시하지 않음).

프로세스 및 터미널 장치 당 하나의 세션 만있을 수 있습니다. 세션에는 제어 터미널이 연결될 수 있지만 반드시 그럴 필요는 없습니다 (모든 세션은 터미널없이 열릴 때까지 시작됩니다). xterm, 쉘을 실행하기 위해 포크하는 프로세스에서는 일반적으로 새 세션을 작성하므로 (있는 xterm경우 시작한 터미널에서 분리 ) /dev/pts/x터미널 장치를 새 세션에 연결하여 생성 된 새 세션을여십시오. 그런 다음 해당 프로세스에서 셸을 실행하므로 셸이 세션 리더가됩니다. 해당 세션의 셸 또는 대화식 셸은 일반적으로 프로세스 그룹 및와 함께 tcsetpgrp()해당 터미널의 포 그라운드 및 백그라운드 작업을 설정합니다.

에 관해서는 정보가 TTY 분야 (직렬 또는 PTY)와, 단말 장치에 의해 저장하는지 , 즉 일반적으로 무슨 stty명령을 디스플레이 및 수정. 모든 분야 구성 : 터미널 화면 크기, 로컬, 입력 출력 플래그, 특수 문자 설정 (^ C, ^ Z ... 등), 입력 및 출력 속도 (Pty와 관련이 없음). 즉,에 해당하는 tcgetattr()/ tcsetattr()기능하는 리눅스받는지도 TCGETS/ TCSETSioctl의, 및 TIOCGWINSZ/ TIOCSWINSZ화면 크기. 현재 포 그라운드 프로세스 그룹이 터미널 장치 ( tcsetpgrp()/ tcgetpgrp(), TIOC{G,S}PGRPioctls) 또는 현재 입력 또는 출력 버퍼에 저장된 다른 정보라고 주장 할 수 있습니다 .

단말 장치에 저장된 스크린 크기 정보는 현실을 반영하지 않을 수 있음에 유의한다. 터미널 에뮬레이터는 일반적으로 창 크기를 조정할 때 (마스터 크기에서 동일한 ioctl을 통해) 설정하지만, 응용 프로그램이 슬레이브 측에서 ioctl을 호출하거나 크기 조정이 전송되지 않은 경우 동기화되지 않을 수 있습니다 예를 들어 무시하면 sshdif에 의해 생성 된 다른 pty를 의미하는 ssh 연결 ). 또한 일부 터미널은 이스케이프 시퀀스를 통해 크기를 쿼리 할 수 ​​있으므로 응용 프로그램에서 이러한 방식으로 쿼리하고 해당 정보를 사용하여 라인 규칙을 업데이트 할 수 있습니다.sshSIGWINCH

자세한 내용 은 데비안 의 termiosand tty_ioctl페이지 를 참조하십시오 .

다른 분야의 훈련을하려면 :

  1. 의사 터미널로 마우스를 에뮬레이션하십시오.

    socat pty,link=mouse fifo:fifo
    sudo inputattach -msc mouse # sets the MOUSE line discipline and specifies protocol
    xinput list # see the new mouse there
    exec 3<> fifo
    printf '\207\12\0' >&3 # moves the cursor 10 pixels to the right
    

    위의 pty의 마스터 측은 socat에 의해 명명 된 파이프 ( fifo) 로 종료됩니다 . 우리는 그 fifo를 마우스 시스템 프로토콜에서 의미하는 0x87 0x0a 0x00을 쓰는 프로세스 (쉘)에 연결합니다 no button pressed, delta(x,y) = (10,0). 여기서 우리는 (쉘) 터미널을 에뮬레이션하지 않지만, 마우스, 우리가 보내는 3 바이트는 터미널 장치에서 응용 프로그램에 의해 읽히지 않아야합니다 ( mouse위의 socat일부 /dev/pts/x장치 는 심볼릭 링크입니다 ) 마우스 입력 이벤트로 해석됩니다.

  2. SLIP 인터페이스를 만듭니다.

    # on hostA
    socat tcp-listen:12345,reuseaddr pty,link=interface
    # after connection from hostB:
    sudo ldattach SLIP interface
    ifconfig -a # see the new interface there
    sudo ifconfig sl0 192.168.123.1/24
    
    # on hostB
    socat -v -x pty,link=interface tcp:hostA:12345
    sudo ldattach SLIP interface
    sudo ifconfig sl0 192.168.123.2/24
    ping 192.168.123.1 # see the packets on socat output
    

    위의 직렬 와이어는 socathostA와 hostB 사이의 TCP 소켓으로 에뮬레이트됩니다 . SLIP 회선 규율은 해당 가상 회선 을 통해 교환 된 바이트를 sl0인터페이스 에서 전달하기 위해 SLIP 캡슐화 된 IP 패킷으로 해석 합니다 .


1
이것이 가장 좋은 대답입니다. 나는 그것을 올바른 것으로 표시하고 찬성했다. pts가 저장하는 정보에 대한 마지막 부분을 추가 할 수 있습니까? 이 페이지 에 따르면 (TTY 장치 구성 장) pts는 행 수 및 행 수와 같은 값을 저장합니다. 그것들이 저장하는 다른 정보가 있습니까?
Pierre-Jean

@ Pierre-Jean, 더 많은 정보를 추가했습니다.
Stéphane Chazelas

당신의 대답은 만족스럽지 못하지만 실제로 / dev / pts / M을 어떻게 만드는지에 대한 간단한 예를 보는 것이 흥미로울 것입니다. cat /dev/ptmx &새 pty를 여는 것을 사용하려고 시도했지만 관련 프로세스를 찾을 수 없으므로 어떻게 사용합니까? 두 번째로 시도했지만 echo "1" >/dev/ptmx아무것도하지 않았습니다 ... 왜 이것에 관심이 있습니까? 하나를 통해 원격으로 연결 종종 때 beacause를 ssh(예를 들어), 당신은 얻을 PTY allocation request failed또는 No controlling tty: open /dev/tty작업 제어를 방지 오류. 그것들을 더 잘 이해하는 것이 좋을 것입니다.
not2qubit

@ user1147688에서 pty를 만드는 방법은 다른 질문입니다. 이것은 한 번에 너무 많은 질문입니다. 그러나 자세한 내용은 pty맨 페이지를 참조하십시오.
Stéphane Chazelas

@ StéphaneChazelas 작은 해명 : 1. 그래서 당신은 흐름이 같다고 말을하는지 physical term---- tty---- bash터미널에, 그리고 pty(m)---- tty---- pty(s)---- bash터미널 에뮬레이터에? 물리 터미널에서도 캐릭터 tty반향 시키는 것이 훈련 입니까? 2. 키보드 / 스크린에 연결하여 입력을 관리하는 것은 터미널 에뮬레이터 프로그램입니까? 3. 내가 이해 한 바에 따르면, bash 명령 / 모든 터미널 입력의 라인 버퍼링 tty은 CI / O 함수의 I / O 버퍼 대신 라인 원칙에 의해 수행된다고 말 했습니다 . 이 올바른지?
forumulator

29

편집 :이 답변 이후, 나는 자세한 내용에 관심이있는 사람들을 위해 블로그에 전용 기사 를 썼습니다 .


많은 책을 읽은 후에 이것이 내가 이해 한 것입니다.

  • ptmx는 슬레이브 부분을 할당하는 것 외에 다른 목적을 가지고 있습니까? 그것은 어떤 종류의 "지능"을 제공합니까, 아니면 에뮬레이트 된 터미널 (예를 들어 xterm)은 터미널처럼 행동하는 모든 지능을 가지고 있습니까?

    /dev/ptmx슬레이브 부분을 할당하지 않습니다 : "의사 터미널 마스터 부분"을 할당합니다. / 디바이스는 / ptmx가 아닌 마스터 의사 단말 : 그것은 인 의사 단말 마스터 멀티플렉서 . 마스터 의사 터미널 ( source )을 할당 할 때 경쟁 조건을 피하기 위해 Unix98 PTY 표준으로 작성되었습니다 .

    의사 터미널 의 마스터 부분 (ptm) 은 파일 시스템에 표시되지 않습니다. 파일 디스크립터로 표시됩니다.

    슬레이브 부 (PTS)가 있는 파일에 의해 표현되고 /dev/pts/N여기서 N숫자이다.

    이 PTS에의 연속 호출을 통해 PTM으로부터 얻어지는 grandpt, unlockpt, ptsname. ( 소스 )

    ptm은 장치 및 라인 에디션과의 통신 전용 AUR 드라이버를 대체합니다. 따라서 터미널을 에뮬레이션하지 않지만 line edition 의 기능을 제공하며 pt를 시각화하고 통신하는 방법을 제공합니다. ( 소스 )

    다음은 하드웨어 장치에 연결된 TTY의 그래프입니다. AUR과의 TTY 통신

    그리고 여기 ptm에 연결된 tty의 그래프가 있습니다. PTM과의 TTY 통신

    ptm 파일은 pt와 다른 Ioctl 인수 (ISPTM, UNLKPT, TIOCREMOTE, TIOCSIGNAL)를 처리합니다.

  • 왜 xterm은 슬레이브 부분의 stdout과 stdin 만 전달하기 때문에 마스터 부분과 상호 작용해야합니까? 왜 pts 파일에서 직접 쓰고 읽을 수 없습니까?

    프로세스는 가상 파일 (읽기, 쓰기, ioctl ..)에 수행 된 작업을 통해 장치와 상호 작용합니다. 파일 자체가 존재하지 않으며 드라이버는 파일을 사용하여 읽기 또는 쓰기 메소드가 호출 될 때 조치를 트리거합니다. (드라이버에 대한 정보는 부록을 참조하십시오)

    TTY는 TTY와 상호 작용하는 정확한 방법을 정의합니다. 프로세스는 장치에서 쓰고 읽으며 어떤 종류의 TTY가 구현되는지에 관계없이 동일한 동작을 기대합니다.

    • 프로세스 에서 터미널에서 항목 을 읽는 데 사용되는 읽기 기능
    • 쓰기 기능 은 프로세스가 터미널에 출력을 보내기 위해 사용합니다

    pt는 TTY 드라이버처럼 동작합니다. 그것의 read 및 write 메소드는 TTY Driver 동작을 구현하는 데 사용됩니다. 데이터를 전송할 실제 장치가 없기 때문에 스트림 쌍이 생성되고 ptm은 pts가 스트림으로 보낸 데이터를 읽는 읽기 기능과 사용 가능한 스트림으로 데이터를 보내는 쓰기 기능을 구현합니다. pts가 읽을 때

    장치를 나타내는 파일은 클래식 파일이 아니며 파일에 xterm쓰여진 내용을 보려면 단순히 열기라고 부르고 읽을 수는 없습니다. 이러한 기능은 여기에서 완전히 다른 동작을합니다.

  • 세션 ID가 항상 하나의 pts 파일에 첨부되어 있습니까? ps 명령을 입력하고 동일한 / dev / pts / X에 대해 2 개의 sessionId를 찾을 수 있습니까?

    나는 그렇게 생각하지 않는다. 세션 ID는 pt를 첨부하는 첫 번째 프로세스 (일반적으로 bash)에 의해 정의되며 다른 세션을 생성하고 동일한 pt에 첨부하는 방법을 보지 못한다. 어쩌면 이와 같은 도구 socat가 이것을 할 수 있습니까?

  • pts는 어떤 다른 정보를 저장합니까? Xterm은 모든 필드를 자체적으로 업데이트합니까, 아니면 ptm에서 "지능"을 추가합니까?

    pt는 통신하는 단말기에 관한 2 가지 범주의 정보를 저장한다 : TerminfoTermcap. 일반적으로 많은 터미널 에뮬레이터는 해당 용어에 대한 용어 정보를 관리하는 라이브러리를 기반으로합니다 (예 : VTX100을 에뮬레이트하기위한 모든 기능 값 제공). 이러한 라이브러리의 예는 libvte 입니다. 편집 (Stephane Chazelas 설명 참조) : 터미널 기능은 pt에 의해 저장되지 않습니다.

신관


termcap 및 terminfo는 터미널 또는 터미널 에뮬레이터 기능에 대한 데이터베이스이며 tty 또는 pty 장치와 관련이 없습니다.
Stéphane Chazelas

좋아요, 답변을 편집하겠습니다. 의견 주셔서 감사합니다. 알고있는 경우 답변에 pt에 대한이 정보를 추가 할 수 있습니까 (예를 들어 pts는 화면 크기를 저장합니다)?
Pierre-Jean

6
이것들은 좋은 이미지입니다. 어떤 소프트웨어를 사용하셨습니까?
Gilles

5
@Gilles 감사합니다. 나는 그들을 한 잉크 스케이프 , 오픈 소스 벡터 그래픽 편집기. 이런 종류의 그래픽을 만드는 가장 효율적인 방법은 아니지만 관심이 있으시다면 이런 종류의 등각 투영 도면을 만드는 방법에 대한 기사썼습니다 .
Pierre-Jean

나는 당신이 제어 터미널에 두 개의 세션을 습격하거나 하나의 세션이 하나 이상의 제어 터미널을 갖도록 할 수 있다고 생각하지 않습니다.
炸鱼 薯条 德里克

9

다음은 sshd작동 방식 에 대해 얼마 전에 작성한 구성표 입니다. 그것은 선 분야와 사물의 운영과 관련이 없지만 누가 무엇과 상호 작용하는지에 대한 실제 그림을 추가합니다.

여기에 이미지 설명을 입력하십시오


정말 감사합니다. 나는 그것을 알아 내려고 노력하는 데 이틀을 보냈다. pty가 인스턴스화되지 않을 때 어떤 일이 발생하는지 궁금합니다. stdin은 존재하지 않지만 stdout과 stderr는 어디에 기록됩니까?
작은 친구

@emmasculateur 도움이되어 기뻤습니다. 죄송합니다, "pty가 인스턴스화되지 않은 경우"가 무슨 뜻인지 이해할 수 없습니다. pty가 인스턴스화되지 않은 경우의 예를 들어 줄 수 있습니까?
보리스 Burkov

1
"pty가 인스턴스화되지 않음"은 ssh with를 실행 -T하면 의사 터미널 할당을 비활성화한다고 말합니다. 예를 들면 : ssh -T emasculateur@localhost "sleep 10" 다음 ps aux|grep sleep이를 보여줍니다 emasculateur 21826 0.0 0.0 23032 3728 ? Ss 02:49 0:00 zsh -c sleep 10 bash는 쓰기 않는 경우 stdoutstderr? 내 질문이 이해되기를 바랍니다.
작은 친구

@ emmasculateur hm, 그것은 좋은 질문입니다, 말이됩니다, 나는 단지 이전에 그것을 생각하지 않았습니다. 그런 식으로, 터미널을 연결하지 않고 원격 컴퓨터에서 데몬으로 프로세스를 시작합니다. 내 생각에는 표준 입 / 출력 / 오류 /dev/null가 일반 데몬처럼 좋아 지지만 확실하지는 않습니다. 참조 : serverfault.com/questions/593399/...
보리스 Burkov

@emmasculateur 나는 또한 당신과 다른 경우에 우연히 만났다 : 만약 당신의 프로세스가 터미널을 가지고 있었지만 그 터미널이 닫히면, 프로세스는 stdout / stdin에 대한 읽기 / 쓰기 시도시 커널로부터 SIGHUP을받을 것입니다. 이것은 종종 / 없이 nohup또는 ssh를 통해 시작된 작업을 종료합니다 . screentmux
Boris Burkov

0

man pts 말한다 :

/ dev / ptmx 파일은 주 번호가 5이고 부 번호가 2 인 문자 파일이며 대개 모드는 0666이고 root.root의 owner.group입니다. 의사 터미널 마스터 및 슬레이브 쌍을 만드는 데 사용됩니다.

프로세스가 / dev / ptmx를 열면 의사 터미널 마스터 (PTM)에 대한 파일 디스크립터를 가져오고 의사 터미널 슬레이브 (PTS) 장치는 / dev / pts 디렉토리에 작성됩니다. / dev / ptmx를 열어 얻은 각 파일 디스크립터는 해당 PTS가있는 독립 PTM이며 디스크립터를 ptsname (3)에 전달하여 경로를 찾을 수 있습니다.

의사 터미널 슬레이브를 열기 전에 마스터 파일 설명자를 grantpt (3) 및 unlockpt (3)로 전달해야합니다.

의사 터미널 마스터와 슬레이브가 모두 열리면 슬레이브는 실제 터미널의 인터페이스와 동일한 인터페이스를 프로세스에 제공합니다.

슬레이브에 기록 된 데이터는 마스터 디스크립터에 입력으로 표시됩니다. 마스터에 기록 된 데이터는 입력으로 슬레이브에 표시됩니다.

실제로 의사 터미널은 xterm (1)과 같은 터미널 에뮬레이터를 구현하는 데 사용됩니다. 여기서 의사 터미널 마스터에서 읽은 데이터는 실제 터미널이 데이터를 해석하는 방식과 동일한 방식으로 응용 프로그램에서 해석됩니다. 의사 터미널 마스터에서 읽은 데이터가 네트워크를 통해 터미널 또는 터미널 에뮬레이터에 연결된 클라이언트 프로그램으로 전송되는 sshd (8)와 같은 로그인 프로그램.

의사 터미널은 일반적으로 파이프에서 입력을 읽는 것을 거부하는 프로그램 (예 : su (8) 및 passwd (8))에 입력을 보내는 데 사용될 수 있습니다.

소개 /dev/pts/X indexing:

각 X는 사용자가 연 세션이므로 슬레이브는 인덱싱해야합니다.

)에 관하여 TeteType (/dev/ttyN:

실제 콘솔은와 같은 부팅 시스템에 의해 생성되었습니다 sysV.

슬레이브가 마스터를 왜 삽입했는지에 관하여 : http://commons.wikimedia.org/wiki/File:Termios-script-diagram.png


죄송하지만 질문에 답변하지 않았습니다. 이미 매뉴얼 페이지를 읽고이 그래프를 보았지만 동작이 명확하지 않았습니다. illuminÉ가 제안한대로 질문에 따라 응답을 확장 할 수 있습니까?
Pierre-Jean


의사 TTY 서브 시스템을 사용하려면 마스터 측 드라이버 / dev / ptmx 용 노드와 N 개의 슬레이브 드라이버 (N은 설치시 결정)가 설치되어 있어야합니다. 슬레이브 장치의 이름은 / dev / pts / M이며 여기서 M은 0에서 N-1 사이의 값을 갖습니다. 사용자는 마스터 장치 (ptm이라고 함)를 통해 pseudo-TTY 장치에 액세스 한 다음 클론 드라이버를 통해 액세스합니다. 마스터 장치는 주요 장치 번호가 복제 장치의 주요 장치 인 장치와 부 장치 번호는 ptm 드라이버의 주 장치입니다.
페르시아 걸프

그렇습니다 나는 맨 팬 페이지를 읽었다.…
페르시아 걸프

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.