기존 화면 세션에 다시 연결 3759/ruby 이제 해당

화면에서 프로그램을 실행 중입니다. 실제로 세션에서 분리하여 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를 눌러도 아무 일도 일어나지 않습니다.



답변

여기에는 두 가지 레벨의 “목록”이 있습니다. 먼저, 개별 세션 내에 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세션에 다시 연결되었습니다 )


답변

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

screen -d -r

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


답변

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

screen -r

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

내 두 센트


답변

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

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


답변

의 출력 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)
...

답변

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.