Linux 설치를 데스크탑까지 부팅한다고 가정합니다. gnome-terminal/konsole/무엇이든 시작하면 명령을 입력할 tty가 있습니다.
이제 SSH를 통해 동일한 시스템에 연결한다고 가정해 보겠습니다. 명령을 입력하기 위해 나를 다른 tty에 바인딩합니다.
이제 내 tty를 원래 SSH 터미널에서 이전에 시작한 gnome 터미널 터미널로 "전환"하고 싶다고 가정해 보겠습니다.
screen -x
기본적으로 화면 없이 동일한 작업을 수행할 수 있는 방법이 있는지 묻고 있습니다 .
/dev 파일에 무언가를 에코하면 출력을 다른 tty로 쉽게 보낼 수 있다는 것을 알고 있지만 tty에 무엇이 있는지 "보는" 방법은 모르겠습니다.
어떤 아이디어가 있나요?
답변1
어쩌면 이러한 패턴으로 상황이 명확해질 수도 있습니다. 일반적인 설정은 다음과 같습니다.
Terminal (/dev/ttyX or /dev/pts/x) device | (screen)<--[<output]----x-------(stdout) Process1 Terminal (keyboard)---[input >]---o-\----->(stdin) \ \ (hardware console or \ `----(stdout) Process2 virtual console or terminal `---->(stdin) emulators like xterm, …)
그리고 가지고아니요Process3
다음과 같은 몇 가지 새로운 메소드를 삽입하십시오.
Terminal device | (screen)<---o---[<output]--x------(stdout) Process1 Terminal (keyboard)---/-x--[input >]-o-\---->(stdin) | / \ \ | | \ `---(stdout) Process2 | | `--->(stdin) | | \ `---------------------(stdout) Process3 `--------------------->(stdin)
화면(및 기타)이 수행하는 작업은 일부 의사 터미널 장치(xterm과 같은)를 할당하고 이를 하나 이상의 "실제" 터미널(물리적, 가상 또는 에뮬레이트된)로 리디렉션하는 것입니다.
Terminal pseudo devices ,--> Terminal (/dev/pts/x) | _______/ device Terminal <--[<output]--- | | | 1 ---[input >]--> |screen | <--[<output]---x-----(stdout) Process1 |Process| ---[input >]--o-\--->(stdin) Terminal <--[<output]--- | | \ \ 2 ---[input >]--> |_______| \ `--(stdout) Process2 `-->(stdin)
xterm을 사용하면 스크린 세션에 screen -x
다른 터미널을 연결할 수 있습니다 .Terminal 3
따라서 아니요, 다른 터미널에 연결된 프로세스를 사용하여 stdin/stdout을 통해 직접 통신할 수 없습니다. 해당 터미널이 의사 터미널이고 프로세스가 그렇게 하도록 설계된 경우(화면과 마찬가지로) 해당 터미널의 프로세스를 제어해야만 이 작업을 수행할 수 있습니다.
답변2
더티 트릭 없이는 다른 터미널의 프로세스를 현재 터미널에 다시 연결하는 것이 불가능합니다. 프로세스가 특정 시스템 호출을 수행하도록 강제할 수 있습니다(다음을 사용).ptrace
) 이로 인해 일부 프로그램이 중단될 수 있습니다. 이를 수행하는 다양한 도구가 있습니다(예 neercs
: retty
, cryopid
, reptyr
, ... 참조).실행 중인 프로세스임을 거부하고 새 화면 셸에 연결하려면 어떻게 해야 합니까?그리고 관련된 문제.
다른 터미널에 이미 표시된 출력을 얻는 것은 다른 문제입니다. 완전히 보편적인 솔루션은 없습니다. 원칙적으로 출력이 렌더링되면 터미널은 이를 이미지로 저장할 수 있습니다. 거의 모든 X 터미널 에뮬레이터는 복사하여 붙여넣을 수 있도록 출력 버퍼를 텍스트 형식으로 유지합니다. 이 출력을 얻는 방법은 터미널 에뮬레이터에 따라 다릅니다. 기본 아이디어는 전체 스크롤백 버퍼 선택을 시뮬레이션하는 것입니다. 예를 들어 Linux 콘솔의 경우 /dev/tty1
스크롤백 버퍼를 쉽게 사용할 수 있습니다 /dev/vcs1
( /dev/vcsa1
텍스트 속성도 있음).
간단한 대답은, 다른 장소에서 터미널에 다시 연결하려면 screen
또는 를 사용하는 것입니다 tmux
.