putty 나 기타 terminal 프로그램을 이용해 server 로 접속해서 console을 사용하는 경우가 종종 있다. 원격으로 접속하다보면 종종 알 수 없는 이유로 연결이 끊어지거나 client 가 절전모드로 들어가서 강제로 끊어지거나 예상치 못한 연결해제가 종종 발생함을 경험할 수 있다. 


이 때는 기존 연결시 진행 중이던 작업 또한 session이 닫히면서 강제로 종료되곤 하는데 이럴 때를 위해 강제로 종료되더라도 기존 작업을 그대로 남겨둘 수 있는 screen이라는 가상 session command가 존재한다. 


원리는 서버로 바로 연결하여 열어놓은 console session에서 다시 한번 screen 명령어를 이용해 가상 session을 여는 방식이다. client에서 직접 연결한 console session이 끊어지더라도 서버 내부에서 생성한 가상 session은 그대로 남아있게 된다. 


쉬운 이해를 위해 간단한 예를 들어보면 다음과 같다. 


putty를 이용해 바로 연결된 console session 상에서 작업을 하다 예기치 못하게 종료되었을 경우





위와 같이 vi 작업을 하다 오른쪽 위 X 버튼을 눌러 강제 종료해 버린뒤 다시 접속해 보면 vi process 또한 종료되어 버려 있음을 확인할 수 있다. 


이에 따라 저장하지 않았다면 모두 날아가 버리는 상황이 발생하게 된다.



위 연결 상황에서 screen을 이용해 작업을 하다 예기치 못하게 종료되었을 경우




screen 을 이용해 가상 session을 연 상황에서는 위와 같이 vi 작업을 하다 오른쪽 위 X 버튼을 눌러 강제 종료를 하더라도 기존 프로세스가 모두 남아 있기 때문에 재접속하여 해당 작업 상황을 그대로 다시 불러올 수 있다. 


재접속해서 아래와 같이 현재 생성되어 있는 screen 의 가상 session의 목록을 확인하고 screen을 통해 해당 가상 session에 다시 접속한다. (자세한 명령어는 아래에 기술하였다.)



위와 같이 가상 session을 확인하고 해당 가상 session에 다시 접속해보면 아래와 같이 기존 작업하던 내역을 그대로 확인할 수 있다. 




screen의 대표적 옵션


screen의 가상 session 생성 및 연결(attach)

screen의 가상 session 연결 해제(detach)

screen의 가상 session 재연결 (re-attach)

screen의 가상 session 종료

screen의 가상 session 목록 조회



screen의 가상 session 생성 및 연결(attach)


# screen -S test

아래 -S option 설명과 같이 -S는 생성하고자 하는 session에 나름 의미있는 이름을 부여하는 옵션이다. 나중에 연결이 끊어진 후(detach) 다시 연결(attach)하고자 할 때 해당 이름을 이용해 좀 더 수월하게 연결(attach)할 수 있따. 




위 명령어를 이용해 가상 session을 생성하게 되면 마치 아무런 명령어가 실행되지 않은 듯 동일한 prompt를 볼 수 있다. 아무것도 실행되지 않은 것 처럼 보일지라고 현재 상황은 screen을 통해 새로운 가상 session이 열린 상황이다. 




screen의 가상 session 연결 해제(detach)


ctrl + a 누른 후 d

가상 session의 어느 상황에서건 Ctrl + a 를 누른 후 바로 d를 누르게 되면 아래와 같이 현재 가상 session에서 detach 되게 된다. 


그냥 putty를 꺼버려도 상관없지만 가상 session이 아닌 상황에서 무엇인가를 실행하거나 할 때 사용할 수 있다. 




screen의 가상 session 재연결 (re-attach)


# screen -r "session 이름"



위의 예에서는 screen session 이름을 test로 하였으므로 screen -r test 를 하게 되면 기존 생성되어 있던 가상 session로 접속하게 된다. 



screen의 가상 session 종료


ctrl + d


이 부분은 사실 그냥 일반 session 연결 종료 하듯이 ctrl + d를 눌러서 종료하는 것과 동일하다. 






screen의 가상 session 목록 조회


# screen -list


현재 screen을 통해 생성된 session 목록을 보여준다.