কেন এসএসএইচ-টি পটভূমি প্রক্রিয়াগুলির জন্য অপেক্ষা করে না?


13

ssh -tব্যাকগ্রাউন্ড কাজ শেষ হওয়ার জন্য এটি অপেক্ষা করে না কেন ?

উদাহরণ:

ssh user@example 'sleep 2 &'

এটি প্রত্যাশার মতো কাজ করে, যেহেতু ssh 2 সেকেন্ড পরে ফিরে আসে

ssh user@example -t 'sleep 2 &'

sleepশেষ করার জন্য অপেক্ষা করে না এবং সঙ্গে সঙ্গে ফিরে আসে।

এর পেছনের কারণ কি কেউ ব্যাখ্যা করতে পারেন? ssh -tফেরার আগে সমস্ত পটভূমি প্রক্রিয়া শেষ হওয়ার জন্য অপেক্ষা করার কোনও উপায় আছে কি ?

আমার ব্যবহারের ক্ষেত্রে হ'ল আমি স্ক্রিপ্টটি দিয়ে শুরু করি ssh -tএবং এই স্ক্রিপ্টটি বেশ কয়েকটি পটভূমি কাজ শুরু করে যা মূল স্ক্রিপ্ট শেষ হওয়ার পরে বেঁচে থাকা উচিত। এটি দিয়ে ssh -tএখন পর্যন্ত সম্ভব নয়।

উত্তর:


22

ছাড়া -t, sshdরিমোট শেলটির স্টাডআউট পায় (এবং শিশুরা পছন্দ করে sleep) এবং স্টেডার দুটি পাইপের মাধ্যমে (এবং ক্লায়েন্টের ইনপুটটি অন্য পাইপের মাধ্যমে প্রেরণ করে)।

sshd এটি ব্যবহারকারীর লগইন শেলটি যে প্রক্রিয়াটিতে শুরু করেছে তার জন্য অপেক্ষা করে না, তবে সেই প্রক্রিয়াটি স্ট্ডআউট পাইপে ইওফের জন্য অপেক্ষা করার পরেও (কমপক্ষে ওপেনশের ক্ষেত্রে স্ট্যাডার পাইপ নয়)।

এবং ইওফটি ঘটে যখন পাইপের লেখার শেষ প্রান্তে কোনও প্রক্রিয়া দ্বারা ফাইল ফাইল বর্ণনাকারী না থাকে, যা সাধারণত তখনই ঘটে যখন তাদের স্টাডআউটটি অন্য কোনও কিছুতে পুনঃনির্দেশিত না করে সমস্ত প্রক্রিয়া চলে যায়।

আপনি যখন ব্যবহার করবেন -t, sshdপাইপ ব্যবহার করবেন না। পরিবর্তে, দূরবর্তী শেল এবং এর শিশুদের সাথে সমস্ত মিথস্ক্রিয়া (স্টিডিন, স্ট্ডআউট, স্টডার) একটি সিউডো-টার্মিনাল জোড়া ব্যবহার করে সম্পন্ন হয়।

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

প্রস্থান করার পরে, পিটিআই জোড়ার মাস্টার সাইডটি বন্ধ হয়ে গেছে যার অর্থ pty ধ্বংস হয়ে গেছে, সুতরাং ক্রীতদাস দ্বারা নিয়ন্ত্রিত প্রক্রিয়াগুলি একটি SIGHUP পাবে (যা পূর্বনির্ধারিতভাবে এগুলি শেষ করে দেবে)।


1
পুরো উত্তর জন্য ধন্যবাদ! আরেকটি জিনিস আমি জানতে চাই: ছদ্ম টার্মিনালটি বের হয়ে গেলে সমস্ত পটভূমি প্রক্রিয়াগুলি কি বন্ধ হয়ে যায়? আমি যে স্ক্রিপ্টটি শুরু করছি তা একটি পরিষেবা শুরু করে, যা ssh এর সাথে ভাল কাজ করে। কিন্তু ssh -t ব্যবহার করার সময়, পরিষেবাটি আরম্ভ হয় না। দেখে মনে হয় সার্ভিস বন্ধ হয়ে গেলে একবার এসএসএস ফেরত আসবে।
ফিলিপ মারি

প্রকৃতপক্ষে, সিউডো-টার্মিনালের মাস্টার সাইডের জন্য এটি জানতে একটি রাস্তা রয়েছে যখন সমস্ত স্লেভ ফাইল বর্ণনাকারী বন্ধ হয়ে গেছে। বাস্তবে এটির সমস্ত ফাইল বর্ণনাকারী বন্ধ হয়ে গেলে এটি প্রকৃত টার্মিনাল দ্বারা চালিত একই প্রক্রিয়া।
জেডিবিপি


@ জেডিবিপি, আপনি কি প্রসারিত করবেন? আপনি কি বোঝাতে চাচ্ছেন তা আমি নিশ্চিত নই. এএএএএফসিটি টার্মিনাল এমুলেটর (কমপক্ষে এক্সটার্ম এবং জিনোম-টার্মিনাল) গোলামের জন্য এফডিসি খোলা থাকার প্রক্রিয়া সম্পর্কে চিন্তা করে না যখন প্রক্রিয়াটি তারা শেলটি কার্যকর করে মারা যায়
স্টাফেন চেজেলাস

@ ফিলিপমুরি আপনি nohupস্ক্রিপ্টটি এভাবে চলতে রাখতে ব্যবহার করতে পারেন । (আপনি ভেতরে দীর্ঘক্ষন ধরে চলা কাজ শুরু বিবেচনা করতে পারেন tmuxযাতে আপনি তাদের উন্নতি ইন্টারেক্টিভ নজর রাখতে পারেন, কিন্তু একটি লগ ফাইল কাজ করে জরিমানা।)
jpaugh

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