Tôi có một số phiên màn hình GNU chạy dài. Tôi ssh vào hộp họ đang chạy và chạy screen -d -r foo
để tách chúng ra nếu chúng được kết nối ở bất kỳ nơi nào khác, và sau đó gắn chúng vào cửa sổ hiện tại của tôi.
99% thời gian này hoạt động tốt, nhưng nhân dịp tôi nhận được điều này:
$ screen -d -r foo
[2430.foo detached.]
... và không có gì xảy ra; Tôi không thể lấy lại vỏ. Thử trong một cửa sổ khác cũng làm điều tương tự, điều duy nhất tôi có thể làm là phá hủy phiên màn hình đó (mất tất cả các chương trình đang chạy trong đó) và tạo lại nó
Lý do tại sao điều này xảy ra? Làm thế nào tôi có thể tránh nó hoặc kết nối lại thành công khi nó xảy ra?
Chỉnh sửa : Của tôi .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
Chỉnh sửa : Kết thúc strace
nhật ký khi cố gắng đính kèm:
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
(bạn có thể cần tạo một bản sao id [ug] không được thiết lập của screen
tệp thực thi) và strace -p$(pidof SCREEN)
khoảng thời gian kết nối lại không thành công.
strace
nhật ký. strace
trong quá trình màn hình chính hiển thị một khối tương tự trong một write()
cuộc gọi
screen
thể đang cố gắng viết vào một kết nối không còn tồn tại?
SCREEN
) vẫn còn sống? Nó đang làm gì ( strace
)?