이미 실행 중인 세션을 필터링하는 방법은 무엇입니까? [반복하다]

이미 실행 중인 세션을 필터링하는 방법은 무엇입니까? [반복하다]

중복 가능성:
실행 중인 프로세스를 거부하고 이를 새 화면 셸에 연결하는 방법은 무엇입니까?

screen세션 중단으로부터 프로세스를 보호하려면 세션 내에서 긴 프로세스를 실행하는 것이 좋습니다. 하지만 이미 실행 중인 프로세스가 있는데 실행하는 것을 잊어버린 경우 어떻게 해야 합니까 screen? 어떻게든 현재 세션을 "캡처"하고 로 보호하는 것이 가능합니까 screen?

답변1

retty 프로그램을 보고 싶습니다. 홈페이지는http://pasky.or.cz//dev/retty/

아이디어는 stdin/stderr/stdout을 리디렉션하는 것입니다. gdb를 사용하여 이를 수행할 수 있지만 이 작은 프로그램을 사용하면 더 쉽게 수행할 수 있습니다. 완벽하지는 않지만 작업을 완료해야 합니다.

답변2

언급한 내용 외에도레티그리고렙텔,닐스그리고코드 삽입이 기능도 사용할 수 있습니다.

답변3

설마.

가장 가까운 방법은 다음과 같습니다.

새 화면 창을 시작하고 다음을 실행합니다.

trap '' INT HUP
exec sleep 99999999

내부에. 창의 tty( $tty)를 기록합니다.

lsof세션의 어떤 프로세스 중 어떤 fd가 현재 tty에 열려 있는지 알아내는 데 사용됩니다 .

gdb를 사용하여 세션의 각 프로세스에 연결하고 call signal(1,1)SIGHUP을 무시하는 작업을 수행합니다. 세션 리더의 경우 call dup2(0,1023)이전 터미널에서 fd를 열어두기 위해 (tty에서 0이 열려 있다고 가정) 작업을 수행해야 할 수도 있습니다 . 그런 다음 각 프로세스에 대해 실행합니다.

set variable $fd = open("the-screen-window-tty",2)

그런 다음 이전 터미널에서 열려 있는 각 fd에 대해 다음을 수행합니다.

call dup2($fd, that-fd)

그런 다음:

call close($fd)
detach

새 터미널에 연결된 세션은 리더(유일한 프로세스)로서 "휴면" 프로세스를 갖지만 창 크기 조정, CTRL-C, CTRL-Z, 작업 제어, /dev/tty 등과 같은 작업은 작동하지 않습니다. 제가 생각하지 못한 더 불쾌한 부작용이 있을 수도 있습니다.

리눅스의 경우,렙텔, 귀하의 질문에 대한 의견에서 @angus가 제안한 새로운 pty를 생성하고 마이그레이션하려는 프로세스에 의해 제어되도록 하여 프로세스를 자동화하고 위의 단점을 해결하십시오. 그러나 하나의 프로세스 AFAICT 마이그레이션만 지원합니다.

관련 정보