GNU 화면-연결이 끊긴 후 화면에 다시 연결할 수 없습니다


23

화면에서 irssi를 사용하고 있었지만 연결이 끊어졌습니다. 서버에 다시 접속 한 후에는 더 이상 해당 화면에 연결할 수 없습니다. screen -ls는 화면이 이미 연결되었음을 나타냅니다.

화면 -D 를 강제로 분리 하려고 시도했지만 분리가 발생했지만 screen -ls는 여전히 연결되어 있다고 말합니다. screen -x를 시도했는데 거기에 중단됩니다.

[sub@server ~]$ screen -ls 
There are screens on:
 4033.poe (Detached)
 7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.

내가 지금 무엇을 할 수 있을까?

답변:


14

'Attached (연결됨)'화면을 연결하려는 경우을 실행하십시오 screen -xr irssi. 대문자 '-X'는 화면 세션 중 하나에 명령을 보내고, 소문자 '-x'옵션을 사용하면 연결된 세션에 다시 연결할 수 있습니다. 그러나 세션 이름이 둘 이상 있으므로 여전히 세션 이름을 지정해야합니다.


9

스크린 세션을 시작한 을 종료 하여 과거에이 동작을 해결했습니다 . 기본적으로 화면에서 소유 하지 않은 사용자의 모든 배쉬 인스턴스를 종료 합니다.


2
여기에 언급 된 모든 옵션 (-RD, -xr)을 시도했지만 세션을 복구 할 수 없습니다. (ps -ef | grep bash)를 찾아서 SCREEN 세션을 종료했습니다.
so_mv

4

기본 이름이 아닌 이름을 지정했습니다. 이 시도:screen -RD irssi


2
비슷한 문제가 있지만 -RD <name> 화면이 여전히 멈춤 ... :-(
harald

4

당신은 시도 할 수 있습니다:

#Reattach a session and if necessary detach it first.
screen -d -r 7728.irssi  

#Reattach a session. If necessary detach and logout remotely first.
screen -D -r 7728.irssi

항상 전체 이름을 사용하는 것이 좋습니다 pid.tty


3

screen버전간에 이전 버전과 호환되지 않는 것으로 알려져 있습니다. 서버에서 버전 screen이 업데이트 된 경우 더 이상 이전 화면 세션에 다시 연결하지 못할 수 있습니다.

이 경우 이전 SCREEN 바이너리를 사용하여 다시 배포하거나 (배포 패키지 관리자가 저장 한 경우) 세션을 완전히 종료 할 수 있습니다.


2

GNU / 스크린 프로세스에 SIGCHLD (창을 닫을 때 일반적으로 수신 됨)를 보내서 성공하면 소켓 파일을 만지거나 다시 만들 수 있습니다.

또한 screen경우에만 다른 두 가지 실행 파일 을 호출하는 두 가지 방법이 있습니다 . SCREEN다시 연결하려는 서버 측 구성 요소 screen이고 터미널과 서버 측 사이에서 데이터를 섞는 클라이언트 측입니다. 따라서 소문자 버전을 죽이려고 할 수 있습니다 ...

예를 들어 다음에서 내 프로세스 screenSCREEN프로세스가 부모 및 자식으로 간주되지 않아 기존 세션에 연결되었음을 나타냅니다.

# ps fao pid,command
25070 SCREEN -U
25071  \_ vim +let &t_Co=256
25073  \_ -bash
25077  \_ -bash
...
18364  \_ sshd: username [priv]
18366  |   \_ sshd: username@pts/17
18367  |       \_ -bash
  870  |           \_ screen -U -x

새로운 세션은 다음과 같습니다.

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash

SIGCHILD를 보내는 방법?
giorgio79

1
scarily named killcommand를 다음과 같이 사용하십시오 . kill -s SIGCHLD <PID>여기서 <PID>프로세스 ID 번호 (내 예제 ​​출력에서 ​​가장 왼쪽 열)
RobM

1

세션이 멈추고 연결을 끊은 vi를 사용하는 동안 이런 일이 발생했습니다. screen -Arx를 사용하여 화면에 다시 연결하려고하면 프로세스가 중단됩니다.

비슷한 하위 프로세스가 실행되어 화면이 중단 될 수 있습니다. 특히 그것에 중점을 두는 경우 화면에서 실행중인 하위 프로세스 목록을 얻으려면 다음을 수행하십시오.

ps ux -H

중첩 된 자식 프로세스가 표시됩니다.

zwood    28481  0.0  0.0 101148  8844 ?        Ss   Oct07   1:36 SCREEN -S mysession
zwood    28482  0.0  0.0  67436  1744 pts/2    Ss+  Oct07   0:00   /bin/bash
zwood    28515  0.0  0.0  67556  1876 pts/4    Ss+  Oct07   0:00   /bin/bash
zwood     4498  0.0  0.0  67436  1772 pts/5    Ss   Oct07   0:00   /bin/bash
zwood     2007  0.0  0.0  73604  1324 pts/5    S+   15:47   0:00     vi /home/zwood/.bashrc.custom
zwood    14670  0.0  0.0  67436  1768 pts/13   Ss+  Oct14   0:00   /bin/bash
zwood    27002  0.0  0.0  67436  1720 pts/11   Ss+  Oct20   0:00   /bin/bash
zwood    24748  0.0  0.0  67432  1712 pts/14   Ss+  Oct21   0:00   /bin/bash

처음에 문제를 일으킨 vi 프로세스를 종료 한 후 아무 문제없이 화면을 다시 연결할 수있었습니다. 화면에 다시 연결된 이전 프로세스를 종료하는 것도 좋은 생각입니다. 그냥 사용하십시오 :

kill -9 <pid>

내부에서 어떤 화면이 작동하는지, 왜 vi가 화면을 멈추게했는지, vi 프로세스를 종료하면 화면이 다시 나타나는 이유를 모르겠습니다. 나는 과거에 스크린 에서이 문제에 부딪 쳤고 대부분의 사람들 이이 스레드에서 권장하지 않는 것을 운없이 시도했습니다. 이 문제를 찾는 것은 자식 프로세스가 나를 위해 일한 유일한 일입니다.


화면 아래에서 프로세스를 죽이는 것이 나를 구한 유일한 것입니다. 전체 화면 세션을 잃는 것보다 화면 아래에서 많은 프로세스를 잃을 것입니다!
요나탄


0
killall -9 sshd

그것은 나를 위해 일했다. 3 개의 다른 화면이 있었고 3 개의 다른 ssh 연결이 끊어졌습니다. 다시 연결 한 후에도 화면이 계속 연결되어 있고 위 명령을 실행했습니다. 물론 현재 연결이 끊어졌지만 새로 연결되었습니다. 다음에 다시 연결하면 모든 화면이 분리되었습니다.

수퍼 유저 인 경우 --userssh 데몬 만 종료 하는 옵션을 사용해야합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.