मेरे पास कई लंबे समय से चल रहे जीएनयू स्क्रीन सत्र हैं। मैं उस बॉक्स पर 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
एक में एक ऐसी ही ब्लॉक ing मुख्य स्क्रीन प्रक्रिया से पता चलता है write()
कॉल
screen
एक कनेक्शन है कि अब मौजूद नहीं है लिखने के लिए कोशिश कर रहा हो सकता है?
SCREEN
) अभी भी जीवित है? यह क्या कर रहा है ( strace
)?