আমি কীভাবে হারিয়ে যাওয়া পর্দার সাথে সংযোগ করব (বিচ্ছিন্ন, সকেট হারিয়েছি)?


23

আমি screenএকটি হোম সার্ভারে চলমান একটি সেশন ছিল । আমার ওয়ার্কস্টেশনটির একটি রিবুট দরকার, তাই আমি টার্মিনালটিকে বিচ্ছিন্ন করে মেরে ফেললাম। সার্ভারের সাথে পুনরায় সংযোগ স্থাপন করার পরে, আমি আমার টিপিক্যাল চালিত করি

$ screen -D -R
[new screen]

তাই না? না, কোনও নতুন অধিবেশন নয়, পুরানোটি গিম করুন। আমি জানি, আমি এটি সরাসরি ধরব। সকেটের নাম কী?

$ screen -list
No Sockets found in /var/run/screen/S-username

$ ls -a /var/run/screen/S-username
.  ..

কিসের অপেক্ষা? আমি জানি আমি এটি চালিয়ে রেখেছি কোথায় যেত?

$ ps -ef | grep -i screen
username  30860     1  0 Oct16 ?        00:00:29 SCREEN

ঠিক আছে, প্রক্রিয়া আছে। কিন্তু পাস করার মতো কোনও সকেট নেই screen -r। আমি কীভাবে আমার সেশনে পুনরায় সংযুক্ত হতে পারি?

উত্তর:


28

Screenফিফো / সকেটটি যখনই SIGCHLDসিগন্যাল পায় তখন তা পরীক্ষা করে । যদি সকেটটি অনুপস্থিত থাকে তবে এটি পুনরায় তৈরি করা হবে। সুতরাং সমাধানটি প্রক্রিয়াটি সন্ধান এবং এটি প্রেরণ করা SIGCHLD

আমার ডেবিয়ান সিস্টেমে screenসেটগিড হিসাবে সেট আপ করা হয়েছে utmpতবে সেটুইড নয়, সুতরাং নীচের এফএকিউ থেকে প্রথম সমাধানটি কাজ করেছে:

$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost

যে সিস্টেমে স্ক্রিন সেটআপড ইনস্টল করা আছে root, এটি কাজ করবে না এবং আপনাকে সক্রিয় সংকেত প্রেরণের জন্য কার্নেলকে বাধ্য করার জন্য আপনাকে সক্রিয় স্ক্রিন সেশনের একটি শিশু প্রক্রিয়াটি মেরে ফেলতে হবে। এর অর্থ বাকীগুলির সাথে পুনরায় সংযোগ করতে আপনার স্ক্রিন উইন্ডোগুলির একটিটিকে বলিদান করা (বিজ্ঞতার সাথে চয়ন করুন!)।

একটি আর্কাইভ জেন্টু উইকি এফএকিউ থেকে :

সকেট অনুপস্থিত

কখনও কখনও স্থির-চলমান স্ক্রিনের সকেটটি ধ্বংস করা যায়, যদিও আসল প্রক্রিয়া এবং এর সমস্ত শিশু প্রক্রিয়া এখনও চলছে। স্ক্রিন-তালিকাটি "/ tmp / uscreens / তে পাওয়া কোনও সকেট প্রদর্শন করবে না" " http://www4.informatik.uni-erlangen.de/ এ এই (এবং কয়েকটি অন্যান্য অস্বাভাবিক সমস্যা) থেকে কীভাবে পুনরুদ্ধার করা যায় তার জন্য কয়েকটি কার্যকর নির্দেশাবলী will n jnweiger / screen-faq.html # এমআইএসসি প্রায় 2/3 নামার পথে।

প্রশ্ন: কোনও অজানা কারণে, / tmp / স্ক্রিনে / এস-মাইনেমে থাকা ফিফোটি চলে গেছে, এবং আমি আমার স্ক্রিন সেশনটি আরম্ভ করতে পারি না। ফিফো পুনরায় তৈরি করার কোনও উপায় আছে?

উত্তর: স্ক্রিনটি যখনই একটি সিএইচসিএলডি সংকেত পায় তখন ফিফো / সকেট পরীক্ষা করে। অনুপস্থিত থাকলে, ফিফো / সকেটটি পুনরায় তৈরি করা হবে।

যদি স্ক্রিনটি অ-সেট-ইউইডে চলমান থাকে তবে ব্যবহারকারী kill -CHLD screenpidসরাসরি সরাসরি ইস্যু করতে পারে (এটি -CHILDকিছু সিস্টেমে রয়েছে)। স্ক্রিনপিড হ'ল একটি ps -xতালিকাতে পাওয়া স্ক্রিন প্রক্রিয়াটির প্রসেস-আইডি ।

তবে সাধারণত এটি কাজ করে না, কারণ স্ক্রিনটি সেটআপড রুট ইনস্টল করা উচিত। এই ক্ষেত্রে আপনি এটি একটি সংকেত পাঠাতে সক্ষম হবেন না, তবে কার্নেলটি করবে। এটি এমন করে, যখনই পর্দার কোনও শিশু তার অবস্থার পরিবর্তন করে। পর্দার অভ্যন্তরে চলমান "সর্বনিম্ন গুরুত্বপূর্ণ" শেলের প্রসেস-আইডি (নীচে শেলপিড) সন্ধান করুন। চেষ্টা kill -STOP shellpid। ফিফো / সকেট যদি আবার উপস্থিত না হয় তবে শেল প্রক্রিয়াটি ধ্বংস করুন। আপনি বাকীটি বাঁচাতে একটি শেল ত্যাগ করেন। যদি কিছুই কাজ না করে, দয়া করে হারিয়ে যাওয়া স্ক্রিন সেশনে চলমান সমস্ত প্রক্রিয়া সরিয়ে দিতে ভুলবেন না।

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