방금 설치했어요특수 매트그리고파트너 제휴가상 머신에서 여러 사용자가 한 세션에 참여할 때 tmate가 두 사용자가 동기화 모드에서 작업할 수 있도록 허용할 수 있는지 궁금합니다. 즉, 각 사용자가 자신의 tmate 창을 갖고 별도로 명령을 실행한다는 의미입니다(물론 세션 소유자의 계정을 사용함).
Google에서 검색했지만 답변을 찾을 수 없거나 이 설정이 tmate 또는 tmate-slave에 대한 문서에 있는지 여부를 찾을 수 없습니다. 이것이 가능한지 아는 사람이 있으면 알려주십시오.
내가 찾은 가장 가까운 질문은 다음과 같습니다.멀티플렉서tmate는 포크이므로 이 기능이 tmate에 자동으로 포함되나요?
답변1
아니요, 이는 tmate(및 GNU Screen과 같은 유사한 프로그램) 작동 방식으로 인해 불가능합니다.
모든 tmate I/O는 pseudo-tty 또는 "pty"를 통해 이루어집니다. 여기에는 두 가지 측면이 있는데, 이를 사용자 측과 프로세스 측이라고 부르겠습니다. * 프로세스 측에는 3개의 데이터 스트림(바이트 시퀀스)이 있습니다. 프로세스의 데이터로 데이터를 보내는 것과 stdin
프로세스의 데이터에서 stdout
데이터를 읽는 것입니다 . stderr
* 사용자 측에는 두 개의 데이터 스트림이 있습니다. 사용자로부터 입력(예: 입력한 내용)을 읽은 다음 이를 프로세스 측 stdin
스트림으로 보내고 데이터를 사용자에게 씁니다. 이는 프로세스 측 Mix stdout
및 Mix에서 읽은 모든 것입니다 stderr
.
tmate가 하는 일은 pty 클라이언트의 모든 바이트 출력을 가져와 각 바이트의 복사본을 각 tmate 클라이언트에 보내고 모든 클라이언트의 모든 입력을 읽고 혼합하여 pty에 보내는 추가 레이어를 pty 앞에 추가하는 것입니다.
이를 통해 pty의 프로세스 측면에서 stdin( bash
, vim
, 등)에서 읽는 프로세스는 어떤 클라이언트가 특정 바이트를 보냈는지 알 수 없거나 심지어 여러 클라이언트(또는 전혀)가 있었는지 알 수 없습니다. 고객). 따라서 해당 세션에 대해 "커서"를 생성한 프로세스는 여러 커서를 가질 수 없습니다.
사용자가 명령을 개별적으로 실행하도록 하려면 명령을 별도의 쉘 프로세스로 보내야 합니다. 이는 별도의 tmate 세션을 의미합니다.