장기 실행되는 GNU 화면 세션이 여러 개 있습니다. 나는 그들이 실행중인 상자에 ssh를 넣고 screen -d -r foo
다른 곳에 연결되어 있으면 분리하고 현재 창에 연결합니다.
99 %의 시간이 잘 작동하지만 때때로 나는 이것을 얻습니다.
$ screen -d -r foo
[2430.foo detached.]
... 아무것도 일어나지 않습니다. 나는 껍질로 돌아갈 수 없다. 다른 창에서 시도해도 똑같은 일을 할 수 있습니다. 내가 할 수있는 유일한 것은 해당 화면 세션을 파괴하고 (실행중인 모든 프로그램을 잃어 버림) 다시 만드는 것입니다.
왜 이런 일이 발생합니까? 발생하지 않을 때 어떻게 피하거나 다시 연결할 수 있습니까?
편집 : 내 .screenrc
:
startup_message off
defwritelock off
bind q quit
caption always '%{gk} (%n) %t %{y}%d %M %Y :: %c:%s %{b}%W%{d}'
screen -t ZSH
autodetach on
shelltitle ZSH
defutf8 on
편집 : strace
첨부 할 때 로그 끝 :
readlink("/proc/self/fd/0", "/dev/pts/14", 4095) = 11
stat64("/dev/pts/14", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 14), ...}) = 0
stat64("/dev/pts/14", {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 14), ...}) = 0
geteuid32() = 1000
getegid32() = 1000
open("/dev/pts/14", O_RDWR|O_NONBLOCK) = 3
geteuid32() = 1000
getegid32() = 1000
close(3) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or SNDRV_TIMER_IOCTL_NEXT_DEVICE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
umask(0) = 022
lstat64("/var/run/screen", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
access("/var/run/screen/S-mrozekma", F_OK) = 0
stat64("/var/run/screen/S-mrozekma", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
umask(022) = 0
uname({sys="Linux", node="etudes-2", ...}) = 0
rt_sigaction(SIGHUP, {0x806e520, [], 0}, {SIG_DFL, [], 0}, 8) = 0
geteuid32() = 1000
getegid32() = 1000
open("/var/run/screen/S-mrozekma", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 6 entries */, 32768) = 124
stat64("/var/run/screen/S-mrozekma/2386.chat", {st_mode=S_IFIFO|0700, st_size=0, ...}) = 0
geteuid32() = 1000
getegid32() = 1000
open("/var/run/screen/S-mrozekma/2386.chat", O_WRONLY|O_NONBLOCK) = 4
geteuid32() = 1000
getegid32() = 1000
fcntl64(4, F_SETFL, O_RDONLY) = 0
geteuid32() = 1000
getegid32() = 1000
getdents(3, /* 0 entries */, 32768) = 0
close(3) = 0
geteuid32() = 1000
getegid32() = 1000
setuid32(1000) = 0
setgid32(1000) = 0
stat64("/var/run/screen/S-mrozekma/2386.chat", {st_mode=S_IFIFO|0700, st_size=0, ...}) = 0
getpid() = 30081
write(4, "\0gsm\4\0\0\0/dev/pts/14\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 12336
strace screen -d -r foo
(연결되지 않은 screen
실행 파일의 사본을 만들어야 할 수도 있음 ) 및 strace -p$(pidof SCREEN)
재 연결 실패시 출력을 게시하십시오 .
strace
로그를 추가했습니다 . strace
메인 화면 프로세스는 비슷한 write()
호출을 보여줍니다
screen
더 이상 존재하지 않는 연결에 쓰려고 할 수 있습니까?
SCREEN
)가 여전히 살아 있습니까? 무엇을하고 strace
있습니까 ( )?