জিএনইউ স্ক্রিনটি আবার সংযোগের চেষ্টা হিমশীতল


16

আমার বেশ কয়েকটি দীর্ঘকালীন জিএনইউ স্ক্রিন সেশন রয়েছে। আমি যে বাক্সটি চালাচ্ছি screen -d -r fooসেটিতে আমি তাড়া করছি এবং তারা অন্য কোথাও সংযুক্ত থাকলে তাদের আলাদা করতে চালাচ্ছি এবং তারপরে সেগুলি আমার বর্তমান উইন্ডোতে সংযুক্ত করুন।

99% সময় এটি ভাল কাজ করে, তবে উপলক্ষে আমি এটি পাই:

$ screen -d -r foo
[2430.foo detached.]

... এবং কিছুই ঘটে না; আমি আর শেল ফিরে পেতে পারি না। অন্য উইন্ডোতে চেষ্টা করা একই কাজ করে, কেবলমাত্র আমি যা করতে পারি তা হ'ল স্ক্রিন সেশনটি (এটি যে সমস্ত প্রোগ্রামগুলিতে চলছে সেগুলি হারাতে) এবং এটি পুনরায় তৈরি করা is

কেন এমন হয়? এটি ঘটলে আমি কীভাবে এড়াতে পারি বা সফলভাবে পুনরায় সংযোগ করতে পারি?


সম্পাদনা : আমার .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

আপনার ~ / .screenrc পোস্ট করা (এবং / etc / স্ক্রিনসিআরটি যদি এটি অনুকূলিতকরণ করা হয়) সহায়ক হতে পারে
ব্যবহারকারী 2387

দয়া করে আউটপুট পোস্ট করুন strace screen -d -r foo(আপনাকে screenএক্সিকিউটেবলের একটি অ-সেট [ug] আইডি অনুলিপি তৈরি করতে হতে পারে ) এবং strace -p$(pidof SCREEN)ব্যর্থ পুনঃসংযোগের সময় প্রায়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস এটি আবার ঘটেছে; আমি straceলগ যোগ । straceমূল পর্দার প্রক্রিয়াটি write()
আইং

পূর্ববর্তী সংযুক্ত স্ক্রিনটি পরিষ্কারভাবে সংযোগ বিচ্ছিন্ন না হওয়ার পরে ঘটেছিল বলে মনে হয় (এই ক্ষেত্রে আমি এটি অন্য কম্পিউটার থেকে সংযুক্ত করেছিলাম যা তার নেটওয়ার্ক সংযোগটি হারিয়েছিল)। screenএমন কোনও সংযোগে লেখার চেষ্টা করা যেতে পারে যা আর নেই?
মাইকেল মরোজেক

মূল পর্দার প্রক্রিয়া (যাকে বলা হয় SCREEN) এখনও বেঁচে আছে? এটা কি করছে ( strace)?
গিলস'স'- দুষ্ট হওয়া বন্ধ করুন '11

উত্তর:


8

আপনার মতো আমারও একই সমস্যা ছিল কিনা তা নিশ্চিত নয়, তবে কখনও কখনও আমি যখন ঘটনাক্রমে সংযোগ বিচ্ছিন্ন হয়ে পড়েছিলাম তখনই আমি একই পর্দার আচরণ করেছি।

কিছুক্ষণ পরে (প্রায় 10-15 মিনিট) স্ক্রিনটি পুনরায় সংযোগের জন্য উপলব্ধ। কিছু অনুসন্ধানের পরে, আমি ম্যান পেজে একটি ছোট নোট পেয়েছি:

   nonblock [on|off|numsecs]

   Tell  screen  how to deal with user interfaces (displays) that cease to
   accept output. This can happen if a user presses ^S or a TCP/modem con‐
   nection gets cut but no hangup is received. If nonblock is off (this is
   the default) screen waits until the display restarts to accept the out‐
   put.  If  nonblock is on, screen waits until the timeout is reached (on
   is treated as 1s). If the display  still  doesn't  receive  characters,
   screen will consider it "blocked" and stop sending characters to it. If
   at some time it restarts to accept characters, screen will unblock  the
   display and redisplay the updated window contents.

গুগল আমাকে বিচ্ছিন্ন করার পরে এটি কারওর পক্ষে সহায়তা করবে, কারণ এটি কেবল পর্দা হিমশীতল।


সেই ম্যান পেজ এন্ট্রিটির ভিত্তিতে আমি ঠিক বুঝতে পারি না, তবে এটি আমার জন্য এটি ঠিক করে দিয়েছে। আমি nonblock 5কিছুক্ষণ আগে সেট করেছিলাম , এবং কেবল আবার ইস্যুতে চলে এসেছি এবং 5 সেকেন্ড পরে হঠাৎ এটি স্বাভাবিকভাবে সংযুক্ত হয়ে গেছে
মাইকেল মরোজেক

6

আপনার স্ক্রিন সেশনটি সম্ভবত শেলটির সিউডো-টার্মিনালের জন্য অপেক্ষা করছে যা আপনি সর্বশেষে পর্দার সাথে সংযুক্ত করেছেন। কখনও কখনও একটি হারিয়ে যাওয়া সংযোগটি শেলটির চারপাশে ছেড়ে যায় এবং এর থেকে আলাদা হওয়ার জন্য স্ক্রীনটির সময়সীমা শেষ হতে হয়।

আপনি যদি চালনা করেন তবে আপনার ls -l /proc/<screen_pid>/fd/<descriptor_of_hung_write>দেখতে হবে এটি পূর্ববর্তী শেল সেশনের pts।

আপনি যে বাশ / শেল সেশনটি সংযুক্ত করেছিলেন তা একবার মেরে ফেললে আপনি পুনরায় সংযুক্ত করতে সক্ষম হবেন।

# ps auwxf|grep -B2 screen
root     23214  0.0  0.0 109304  4016 ?        Ssl  19:13   0:00  \_ sshd: root@pts/6 
root     23566  0.0  0.0 117400  2272 pts/6    Ss   19:13   0:00      \_ -bash
root     10445  0.0  0.0 125156  1156 pts/6    S+   19:23   0:00          \_ screen -ADR MYSCREEN

আমি এই ক্ষেত্রে, হত্যা প্রক্রিয়া 23214 স্ক্রিন অধিবেশন প্রকাশ করবে এবং আপনি পুনরায় যোগাযোগ করতে পারেন।


3
এর কোনও পিতামাতার প্রক্রিয়া না থাকলে আমি কী করব?
d33tah

এটি আজ আমার জন্য সাহায্য করেছে, আবার এসএসডি তৈরির পর্দার প্রতিক্রিয়াটিকে হত্যা করছে! ঘন্টা এবং ঘন্টা কাজ সংরক্ষণ!
ব্যবহারকারী230910

4

সেই স্ক্রিন সেশনগুলি শুরু হওয়ার পরে কি পর্দা আপগ্রেড করা হয়েছে?

আমি সঠিক বিশদটি মনে করতে পারি না তবে আমার মনে আছে যে প্রায় একমাস বা তিন মাস আগে apt-get dist-upgradeআমার সিস্টেমে একটি (ডিবিয়ান সিডে) আপগ্রেড করা পর্দা এবং পোস্টিনস্ট আমাকে বেমানান আপগ্রেড সম্পর্কে সতর্ক করেছিলেন। পুরানো সেশনে পুনরায় যুক্ত করতে সক্ষম করার জন্য পুরাতন পর্দার একটি অনুলিপি (কোথাও / tmp আইআইআরসি-র অধীনে) রাখা হয়েছিল, তবে তাদের হত্যা ও পুনরায় চালু করার পরামর্শ দেওয়া হয়েছিল।

আপনি যে লক্ষণগুলি প্রতিবেদন করেছেন সেগুলি আমি যা দেখেছি তার অনুরূপ শোনায় যখন আমি দুর্ঘটনাক্রমে নতুন / usr / বিন / স্ক্রিনের সাথে পুরানো স্ক্রিন সেশনে পুনরায় সংযোগ করার চেষ্টা করেছি।

এটি সম্ভবত এটি ছিল, জুনে ফিরে এসেছিল:

2012-06-14 08:11:51 upgrade screen:amd64 4.0.3-14 4.1.0~20120320gitdb59704-2


ডেবিয়ান 7 হুইজি প্রকাশের আগে এই সমস্যাটি স্থির করা হয়েছিল। যদিও এটি আপস্ট্রিম রিলিজ বা গিট স্ন্যাপশট অনুসারে উপস্থিত রয়েছে। দেখুন bugs.debian.org/683228
অ্যাক্সেল Beckert

পুরানো সেন্টোস 6 ইনস্টল করতে আজই আমার কাছে এটি ঘটেছে। ধন্যবাদ!
মাইক অ্যান্ড্রুজ

আমি জেন্টুতে এই মাত্র কামড়েছি, আমি ৪.৩ থেকে ৪.৪ এ উন্নতি করছি।
jlh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.