![이미 실행 중인 세션을 필터링하는 방법은 무엇입니까? [반복하다]](https://linux55.com/image/27790/%EC%9D%B4%EB%AF%B8%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%EC%84%B8%EC%85%98%EC%9D%84%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B0%98%EB%B3%B5%ED%95%98%EB%8B%A4%5D.png)
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 마이그레이션만 지원합니다.