기존 화면 세션에 다시 연결


81

화면에서 프로그램을 실행 중입니다. 실제로 세션에서 분리하여 netstat를 확인하면 프로그램이 여전히 실행 중임을 알 수 있습니다 (원하는 것).

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

이제 해당 프로세스를 실행하는 세션에 다시 연결하고 싶습니다. 새 터미널을 시작하고 screen -r을 입력합니다

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

그러나 내가 만든 프로세스를 실행하는 세션이 무엇인지 어떻게 알 수 있습니까?

이제 내가 만난 문서 중 하나가 말했습니다.

"창을 사용할 때 Ca A를 입력하여 이름을 지정하십시오.이 이름은 창 목록에 사용되며 많은 창을 사용할 때 각 창에서 수행중인 작업을 기억하는 데 도움이됩니다. "

문제는 새로운 화면 세션에있을 때 control + a A를 눌러도 아무 일도 일어나지 않습니다.


(A)로부터 하나를 선택하기위한 빠른 방법 에서 여러 오픈 화면이되어 screen -r다음 ... 숫자 1, 2, 3 화면의리스트.
user18099

답변:


91

여기에는 두 가지 레벨의 "목록"이 있습니다. 먼저, 개별 세션 내에 ctrl-A A가있는 "창 목록"이 있고, 두 번째로 질문에 붙여 넣은 항목과 "세션 목록"이 있습니다 screen -ls.

-S매개 변수를 사용하여 세션 이름을 사용자 정의 할 수 있습니다. 그렇지 않으면 호스트 이름 (teamviggy)을 사용합니다.

$ screen

(분리하려면 Ctrl-A d)

$ screen -S myprogramrunningunderscreen

(분리하려면 Ctrl-A d)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

보너스로 -S나중에 다시 연결하기 위해 전달하는 이름의 명확한 약어를 사용할 수 있습니다 .

screen -r myprog

( myprogramrunningunderscreen세션에 다시 연결되었습니다 )


그 Ctrl + A는 당신을 위해 작동합니까? Control + a를 동시에 누른 다음 빠르게 다시 a를 누르면 아무 일도 일어나지 않습니다.
JohnMerlino 2016 년

예; ctrl-A a와 사이에는 차이가 ctrl-A shift-A있습니다. 후자는 나에게 촉구했다 Set window's title to:. 두 번째 A를 위해 shift 키를 누르고 있는지 확인하십시오.
Paul

"screen -r 21tweet"로 응답 : "화면이 있습니다 : 3239.21tweet (08/21/2015 09:14:35 AM) (Attached) 21tweet와 일치하는 화면을 다시 시작할 수 없습니다." 이것이 무엇일까요?
Michael

화면 세션 이름을 지정하는 데있어 분명하지 않은 경고는 이름을 -S으로 지정할 경우 자동으로 달리 다시 시작할 때 ID 번호 뒤에 나오는 이름의 약어를 사용하고 화면 세션의 전체 이름에 점을 표시해야한다는 것입니다. 생성 된 세션 이름으로 ID와 점을 포함 할 수 있습니다.
스펜서 윌리엄스

1
오타가 수정되었습니다. 그리고이 사이트는 추가 텍스트없이 짧은 의견을 게시 할 수 없습니다.
Paul

37

screen -r다시 연결하지 못한 경우가있었습니다 . 다음 -d과 같이 플래그를 추가

screen -d -r

나를 위해 일했다. 이전 화면을 분리하고 다시 연결할 수있었습니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오.


12

쉬운 방법은 단순히 임의의 화면에 다시 연결하는 것입니다.

screen -r

그런 다음 화면을 실행하면 타격 Ctrl-A "(예 : control-A와 큰 따옴표) 을 눌러 모든 활성 화면의 목록을 얻을 수 있습니다 . 그런 다음 활성 화면을 한 번에 하나씩 선택하여 실행중인 화면을 확인할 수 있습니다. 물론 화면 이름을 지정하면 올바른 화면을 쉽게 식별 할 수 있습니다.

내 두 센트


내 스크린 이름을 어떻게 지정합니까?
오스틴

@austin screen -S <세션 이름>
Brian

4

여러 클러스터의 여러 컴퓨터에서 작업 해야하는 다음 콤보를 사용하는 경향이 있습니다.

screen -S clusterX

그러면 환경을 구축 할 수있는 새 화면 세션이 만들어집니다.

screen -dRR clusterX

이것이 나중에 해당 화면 세션에 다시 연결하는 데 사용하는 것입니다. 멋진 부분은 세션이 다른 곳에 연결되면 다른 디스플레이를 분리한다는 것입니다. 또한 누군가 모르게 내 서버를 재부팅 한 것처럼 기발한 이유로 세션이 없으면 세션을 만듭니다. 드디어. 여러 세션이 존재하면 첫 번째 세션을 사용합니다.

이 팁에 대한 https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions에 대한 많은 찬사가 있습니다 .

편집하다:

또한 man screen암호 매개 변수에 대한 유용한 설명이 몇 가지 있습니다.

       -d -r   Reattach a session and if necessary detach it first.

       -d -R   Reattach a session and if necessary detach or  even  create  it
               first.

       -d -RR  Reattach  a  session  and if necessary detach or create it. Use
               the first session if more than one session is available.

       -D -r   Reattach a session. If necessary  detach  and  logout  remotely
               first.

더 많은 -D것이 있으므로 확인하십시오man screen


2

의 출력 screen -list형식은 다음과 같습니다 pid.tty.host. pid는 다음을 사용하여 첫 번째 자식 프로세스를 얻는 데 사용할 수 있습니다 pstree.

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

당신은 이와 같은 목록을 얻을 것입니다

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...

1
screen -d -r 4964

또는

screen -d -r 4874

$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.