প্রশ্ন একটি এসএসএইচ সেশন থেকে সংযোগ বিচ্ছিন্ন হচ্ছে আপনার প্রোগ্রাম হত্যা?


সুতরাং, আমি শুরু করার পরে একটি এসএসএইচ-সেশন থেকে সংযোগ বিচ্ছিন্ন হয়ে বলি rsync অথবা cp অথবা অন্য কোন কমান্ড যে দীর্ঘ চলমান হতে পারে। যে কমান্ডটি সংযোগ বিচ্ছিন্ন হওয়ার পরে এটি শেষ না হওয়া পর্যন্ত নাকি এটি কেবলমাত্র মারা যায়?

সর্বদা এই বিস্মিত।


76
2018-01-06 03:09


উত্স


আমি শুধু উপরের কথাটি যোগ করতে চাই যে, যদি আপনি নিজের অবস্থানে নিজেকে খুঁজে পান তবে আপনাকে ইতিমধ্যে চলমান প্রক্রিয়াটি রাখতে হবে screenচেষ্টা করুন reptyr। - a sad dude


উত্তর:


2016 এর জন্য সম্পাদনা করুন:

এই প্রশ্ন & একটি পূর্বাভাস systemd v230 ধ্বংসাবশেষ। Systemd v230 অনুসারে, নতুন ডিফল্টটি লগইন সেশনের সমাপ্তির সমস্ত সন্তানকে হত্যা করা, এটিকে আটকাতে ঐতিহাসিকভাবে বৈধ সতর্কতাগুলি নেওয়া হয়েছে কিনা তা নির্বিশেষে। আচরণ সেটিং দ্বারা পরিবর্তন করা যেতে পারে KillUserProcesses=no মধ্যে /etc/systemd/logind.conf, অথবা ব্যবহারকারীর স্পেসে একটি ডিমন শুরু করার জন্য systemd- নির্দিষ্ট প্রক্রিয়া ব্যবহার করে circumvented। এই প্রক্রিয়া এই প্রশ্নের সুযোগ বাইরে।

নিচের লেখাটি লিনাক্সের চেয়ে বেশি সময়ের জন্য ইউনিক্স ডিজাইন স্পেসে কীভাবে ঐতিহ্যগতভাবে কাজ করেছে তা বর্ণনা করে।


তারা হত্যা করা হবে, কিন্তু তাৎক্ষণিকভাবে অবিলম্বে না। এসএসএইচ ডিমনকে আপনার সংযোগ মৃত্যুর সিদ্ধান্ত নিতে কতক্ষণ সময় লাগে তা নির্ভর করে। অনুসরণ করা হয় কি একটি দীর্ঘ ব্যাখ্যা যে এটি বুঝতে সাহায্য করবে কিভাবে এটি আসলে কাজ করে।

যখন আপনি লগ ইন করেন, SSH ডেমন আপনার জন্য একটি ছদ্ম-টার্মিনাল বরাদ্দ করে এবং আপনার ব্যবহারকারীর কনফিগার করা লগইন শেল এ সংযুক্ত করে। এই নিয়ন্ত্রণ টার্মিনাল বলা হয়। যে সমস্ত প্রোগ্রামটি আপনি স্বাভাবিকভাবে শুরু করেন, কোনও শেলের গভীর স্তরগুলি কতই না গুরুত্বপূর্ণ, তারপরে শেষ পর্যন্ত তার পূর্বপুরুষটিকে সেই শেলটিতে চিহ্নিত করবে। আপনি এই সঙ্গে পালন করতে পারেন pstree কমান্ড।

যখন আপনার সংযোগের সাথে যুক্ত SSH ডেমন প্রক্রিয়া সিদ্ধান্ত নেয় যে আপনার সংযোগটি মৃত, এটি একটি হ্যাঙ্গআপ সংকেত পাঠায় (SIGHUP) লগইন শেল। এটি শেলটি অবহিত করে যা আপনি অদৃশ্য হয়েছেন এবং এটি নিজের পরে পরিষ্কার হওয়া উচিত। এই সময়ে কি ঘটবে শেল নির্দিষ্ট ("HUP" এর জন্য তার ডকুমেন্টেশান পৃষ্ঠাটি অনুসন্ধান করুন), তবে অধিকাংশ অংশে এটি পাঠানো শুরু করবে SIGHUP terminating আগে এটি সঙ্গে যুক্ত কাজ চলমান। সেই প্রক্রিয়াগুলির প্রত্যেকটিই সেই সংকেত প্রাপ্তির পরে যা করতে কনফিগার করা হবে তা করবে। সাধারণত যে terminating মানে। যদি সেই চাকরিগুলি তাদের নিজস্ব কাজ থাকে, তবে সংকেতটি প্রায়শই পাশাপাশি পাশাপাশি পাশাপাশি পাস হবে।

কন্ট্রোলিং টার্মিনালের হ্যাঙ্গআপটি বেঁচে থাকা প্রক্রিয়াগুলি এমন একটি বিষয় যা একটি টার্মিনাল (ডিমন প্রক্রিয়াগুলি যা আপনি এটির মধ্যে শুরু করেছেন) থেকে বিচ্ছিন্ন করে ফেলেছেন, অথবা যেগুলিকে প্রিফিক্স দিয়ে আহ্বান করা হয়েছে nohup কমান্ড। (অর্থাত "এই বিষয়ে ঝগড়া করবেন না") ডেমনগুলি হুপ সিগন্যালটিকে আলাদাভাবে ব্যাখ্যা করে; যেহেতু তাদের কোনও নিয়ন্ত্রণকারী টার্মিনাল নেই এবং স্বয়ংক্রিয়ভাবে একটি HUP সংকেত গ্রহণ করে না, এটি পরিবর্তে কনফিগারেশনের পুনরায় লোড করার জন্য প্রশাসকের ম্যানুয়াল অনুরোধ হিসাবে পুনঃপ্রতিষ্ঠিত হয়। বিদ্বেষপূর্ণভাবে এর মানে হল যে বেশিরভাগ প্রশাসক অ-ডেমোনের জন্য এই সংকেতটির "hangup" ব্যবহারটি যতক্ষণ পর্যন্ত না অনেক পরে না শিখবে। এ কারণেই তুমি এটা পড়ছো!

টার্মিনাল মাল্টিপ্লেক্সারগুলি আপনার শেল পরিবেশকে বিচ্ছিন্নকরণের মধ্যে অক্ষত রাখার জন্য একটি সাধারণ উপায়। তারা আপনাকে আপনার শেল প্রসেস থেকে আলাদা করার অনুমতি দেয় যাতে আপনি পরে তাদের সাথে পুনরায় সংযুক্ত করতে পারেন, নির্বিশেষে যে সংযোগ বিচ্ছিন্ন বা ইচ্ছাকৃত ছিল কিনা তা নির্বিশেষে। tmuxএবং screen আরো জনপ্রিয় বেশী হয়; তাদের ব্যবহার করার জন্য সিনট্যাক্স আপনার প্রশ্নের সুযোগ অতিক্রম করে, কিন্তু তারা খুঁজছেন মূল্যবান।


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

এই বিশেষ প্রেক্ষাপটে, একটি লেখার ট্রিগার সম্ভবত সবচেয়ে সম্ভবত:

  • সার্ভারের পাশে PTY এ লিখার চেষ্টা করছে এমন একটি প্রক্রিয়া (সাধারণত অগ্রভাগের মধ্যে একটি)। (Server-> ক্লায়েন্ট)
  • ব্যবহারকারী ক্লায়েন্ট পাশে PTY লিখতে চেষ্টা। (Client-> সার্ভার)
  • যে কোন ধরণের রাখিবার। সাধারণত এটি ক্লায়েন্ট বা সার্ভার দ্বারা ডিফল্টভাবে সক্ষম হয় না এবং সাধারণত দুটি স্বাদ রয়েছে: অ্যাপ্লিকেশন স্তর এবং টিসিপি ভিত্তিক (যেমন। SO_KEEPALIVE)। ক্যাপলাইভগুলি সার্ভার বা ক্লায়েন্টকে অন্য দিকে সীমাবদ্ধভাবে প্যাকেট প্রেরণ করে তবে এমনকি সকেটে লেখার কোনো কারণ না থাকলেও। যদিও এটি সাধারণত ফায়ারওয়ালগুলিকে খুব দ্রুত সংযোগের সময় স্লট করার উদ্দেশ্যে করা হয় তবে এটি প্রেরকটিকে বিজ্ঞপ্তি দেওয়ার কারণ যুক্ত করা হয় যখন অন্য পক্ষটি দ্রুত প্রতিক্রিয়া জানায় না।

টিসিপি সেশনের জন্য সাধারণ নিয়মগুলি এখানে প্রযোজ্য: ক্লায়েন্ট এবং সার্ভারের মধ্যে সংযোগে বাধা থাকলেও সমস্যাটি চলাকালীন কোনও প্যাকেট পাঠানোর চেষ্টা করা হয় না, সংযোগটি বেঁচে থাকবে তবে শর্ত থাকে যে উভয় পক্ষই প্রতিক্রিয়াশীল এবং পরে প্রত্যাশিত TCP ক্রম সংখ্যা।

যদি সকেটটি মারা যায় বলে একদমই সিদ্ধান্ত নেওয়া হয় তবে প্রভাবগুলি সাধারণত তাৎক্ষণিক: sshd প্রক্রিয়া পাঠানো হবে HUP এবং স্ব-সমাপ্তি (আগে বর্ণিত), অথবা ক্লায়েন্ট সনাক্ত হওয়া সমস্যাটির ব্যবহারকারীকে অবহিত করবে। এটা লক্ষনীয় যে, একদল অন্যের মৃত্যুর কথা মনে করে, তার মানে এই নয় যে অন্যকে এই বিষয়ে অবহিত করা হয়েছে। সংযোগটির অনাথ পাশটি সাধারণত এটি খোলা থাকবে যতক্ষন না এটি এটিতে এবং বার বার লিখতে চেষ্টা করে, অথবা অন্য দিকে থেকে টিসিপি রিসেট পায়। (যদি সংযোগটি তখন উপলব্ধ ছিল) এই উত্তরটিতে বর্ণিত পরিচ্ছন্নতা শুধুমাত্র একবারে ঘটে সার্ভার লক্ষ্য করেছি।


109
2018-01-06 04:36



আমি সেই তালিকায় 'dtach' কমান্ডটি যুক্ত করব - এটি স্ক্রিন / টিএমক্সির বিপরীতে সাজানো যেটিতে এটি আপনাকে একক সেশনে একাধিক টার্মিনাল সংযুক্ত করতে দেয় এবং এটি একটি অধিবেশন দীর্ঘতর করার জন্যও দুর্দান্ত। সাম্প্রতিক ইতিহাস replaying কোনো উপায় প্রদান। - fluffy
dtach ইউআরএল এখানে: dtach.sourceforge.net - slm
চমৎকার ব্যাখ্যা। আমি ইতিমধ্যে আরো linuxey অনুভব! - fregas
এছাড়াও, এটি আপনার উত্তরগুলির টেকনিক্যালি অংশ না হলেও, এখানে একটি তাত্ক্ষণিক আকর্ষণীয় বিষয় রয়েছে: আপনি এটি ব্যবহার করতে পারেন kill -HUP ফাঁকা হিসাবে কারো টার্মিনাল ফাঁস করা জোরদার হিসাবে। আপনি ভাল কারণে এই কাজ করা উচিত নয়। ব্যবহারকারীরা রক্ষণাবেক্ষণের সময় চলমান শেলগুলি ছেড়ে চলে গেলে আমার থেকে বেশিরভাগ মাইলেজ বের হয় এবং আমার শেলটি খোলা রাখার জন্য একটি ফাইল সিস্টেমকে আনমাউন্ট করতে হবে। ব্যবহারকারী সংযুক্ত থাকলে কিন্তু অন্তর্বর্তীভাবে নিষ্ক্রিয়, তাদের sshd প্রক্রিয়া থেকে সংকেত পাঠান। অন্যথায়, যদি এটি একটি টার্মিনাল মাল্টিপ্লেক্সারের ভিতরে চলমান হয়, তবে আপনি যে শেলটি বন্ধ করতে চান তা পাঠান। শুধুমাত্র কাজ থেকে আপনি পালন শেল আপ ঝুলন্ত! - Andrew B
@AndrewB, আপনি কীভাবে "এসএসএইচ ডেমন প্রক্রিয়া ... আপনার সংযোগ মৃত্যুর সিদ্ধান্ত নেয়" এর উপর বিস্তারিতভাবে বর্ণনা করতে পারেন? আর এসএসএইচ ডিমন মনে করে কিভাবে জানতে পারে যে (কোন) সংযোগ মৃত? নাকি? - Xiao Peng - ZenUML.com


যেহেতু অন্যের উল্লেখ আছে, একবার আপনি এসএসএইচ থেকে সংযোগ বিচ্ছিন্ন হয়ে গেলে এটি চলে গেছে।

যেমন @ মাইকেল হ্যাম্পটন এবং অন্যদের আপনি যেমন সরঞ্জাম ব্যবহার করতে পারেন উল্লেখ করেছেন tmux অথবা screen সংযোগ বিচ্ছিন্ন / তাদের সামগ্রী হ্রাস না করে টার্মিনালে পুনরায় সংযোগ (যেমন শিশু প্রক্রিয়া)।

উপরন্তু আপনি একটি ব্যাসার্ধ ব্যবহার করে ব্যাকগ্রাউন্ডে একটি প্রক্রিয়া করতে পারেন & এবং তারপর কমান্ড ব্যবহার করুন disown বর্তমান শেল দিয়ে তাদের বিচ্ছিন্ন করতে।

# start a command
% sleep 5000 &
[1] 3820

# check it
% jobs
[1]+  Running                 sleep 5000 &

# disown everything
% disown -a

# check it again (gone from shell)
% jobs
%

# but it's still running on the system
% ps -eaf|grep "[s]leep"
saml      3820 23791  0 00:16 pts/1    00:00:00 sleep 5000
%

21
2018-01-06 05:27



এটি একটি টার্মিনাল অধিবেশন পুনরায় সংযুক্ত করা সম্ভব disownইডি প্রক্রিয়া? - Fake Name
হ্যাঁ। বিস্তারিত জানার জন্য এই ইউ এবং এল প্রশ্ন দেখুন: unix.stackexchange.com/questions/4034/... - slm


না, কোনও প্রোগ্রাম এখনও টার্মিনাল সংযুক্ত, এবং কিছু সঙ্গে পটভূমি মধ্যে স্থাপন করা হয় না nohup, হত্যা করা হবে।

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


11
2018-01-06 03:16