কোনও এসএসএইচ অধিবেশন থেকে সংযোগ বিচ্ছিন্ন হওয়া কি আপনার প্রোগ্রামগুলিকে হত্যা করে?


88

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

সর্বদা এটি অবাক।


আমি উপরে যা বলা হয়েছে তার সাথে কেবল যোগ করতে চাই, আপনি যদি ইতিমধ্যে একটি চলমান প্রক্রিয়া প্রবেশের প্রয়োজন হয় এমন কোনও পরিস্থিতিতে নিজেকে খুঁজে পান তবে reptyrscreen চেষ্টা করুন ।
একটি দু: খিত

এটি আপনার প্রোগ্রামগুলি মেরে ফেলবে। খুব বিরক্তিকর আপনি OS সংস্করণ আপডেট করছি উবুন্টু 16,04 SSH- র মাধ্যমে 17,10 বলছি থেকে
kurdtpage

উত্তর:


118

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

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

লিনাক্সের অস্তিত্বের চেয়ে দীর্ঘ সময়ের জন্য ইউনিক্স ডিজাইন স্পেসে কীভাবে জিনিসগুলি traditionতিহ্যগতভাবে কাজ করেছে তা নীচের পাঠ্যে বর্ণিত হয়েছে।


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

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

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

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

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


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

এই নির্দিষ্ট প্রসঙ্গে, লেখাগুলি কার্যকর করার কারণগুলি সম্ভবত:

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

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

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


3
আমি সেই তালিকায় 'dtach' কমান্ডটি যুক্ত করব - এটি স্ক্রিন / tmux এর বিপরীত ধরণের যে এটি আপনাকে একক সেশনে একাধিক টার্মিনাল সংযুক্ত করতে দেয় এবং একটি সেশন দীর্ঘায়িত করার জন্যও দুর্দান্ত, যদিও এটি না সাম্প্রতিক ইতিহাস পুনরায় খেলতে কোন উপায় সরবরাহ।
ফ্লাফি

dtachURL এখানে: dtach.sourceforge.net
SLM

2
দুর্দান্ত ব্যাখ্যা। আমি ইতিমধ্যে আরও লিনাক্সি অনুভব করছি!
ফ্রেগাস

3
এছাড়াও, এটি প্রযুক্তিগতভাবে আপনার উত্তরের অংশ না হলেও, এখানে একটি আকর্ষণীয় কিছু ট্রিভিয়া: আপনি kill -HUPকারও টার্মিনালটিকে স্তব্ধ করতে বাধ্য করার জন্য রুট হিসাবে ব্যবহার করতে পারেন । আপনার ভাল কারণ ছাড়া এটি করা উচিত নয়। ব্যবহারকারীরা রক্ষণাবেক্ষণের সময় শেলগুলি চালিত অবস্থায় ছেড়ে যাওয়ার সময় আমি আমার বেশিরভাগ মাইলেজটি বের করি এবং তাদের শেলটি উন্মুক্ত রাখার মতো একটি ফাইল সিস্টেম আমাকে আনমাউন্ট করা দরকার। যদি ব্যবহারকারী সংযুক্ত থাকে তবে টার্মিনালি অলস থাকে তবে তাদের এসএসডি প্রক্রিয়াতে সংকেত প্রেরণ করুন। অন্যথায়, যদি এটি একটি টার্মিনাল মাল্টিপ্লেক্সারের অভ্যন্তরে চলছে, তবে আপনি যে শেলটি থামাতে চান তা প্রেরণ করুন। আপনাকে কাজ থেকে বিরত রেখে কেবল শেলটি ঝুলিয়ে রাখুন!
অ্যান্ড্রু বি

@ অ্যান্ড্রুবি, আপনি কীভাবে "এসএসএইচ ডেমন প্রক্রিয়াটি ... সিদ্ধান্ত নিয়েছেন যে আপনার সংযোগটি মারা গেছে"? এবং এসএসএইচ ডেমন চিন্তা করে / জানে যে (কোন) সংযোগটি মারা গেছে বা কীভাবে তা আমি কীভাবে জানতে পারি?
জিয়াও পেং - ZenUML.com

22

অন্যদের যেমন উল্লেখ করা হয়েছে, আপনি একবার ssh থেকে সংযোগ বিচ্ছিন্ন করে এর মধ্যে যে কোনও কিছু চলেছে।

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

অতিরিক্তভাবে আপনি একটি এম্পারস্যান্ড ব্যবহার করে পটভূমিতে একটি প্রক্রিয়া রাখতে পারেন &এবং তারপরে 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
%

কোনও disownএড প্রক্রিয়াতে টার্মিনাল সেশনটি পুনরায় সংযুক্ত করা সম্ভব ?
নকল নাম

4
হ্যাঁ. : বিস্তারিত জানার জন্য এই ইউ & এল প্রশ্ন দেখতে পাবেন unix.stackexchange.com/questions/4034/...
SLM

13

না, কোনও প্রোগ্রাম এখনও টার্মিনালের সাথে সংযুক্ত, এবং ব্যাকগ্রাউন্ডে রাখেনি এমন কিছু হ'ল nohupহত্যা করা হবে।

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

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