শেলটি বের হয়ে গেলে, বা হত্যা করা হলে পশ্চাদপটে কাজটি নিহত হয় তা ঠিক কী নির্ধারণ করে?


12

এই প্রশ্নের নিয়ে আসা হয়েছে বেশ একটি অনেক ( সত্যিই অনেক ), কিন্তু আমি উত্তর সাধারণত অসম্পূর্ণ হতে খোঁজার করছি। সাধারণ প্রশ্নটি হ'ল আমি যখন এসএসএস থেকে বের হয়ে / মরে যাই তখন কেন আমার কাজটি মারা যায় না? "এবং আমি যা পেয়েছি তা এখানে। প্রথম প্রশ্নটি: নিম্নলিখিত তথ্যগুলি কতটা সাধারণ? আধুনিক দেবিয়ান লিনাক্সের জন্য নিম্নলিখিতটি সত্য বলে মনে হচ্ছে, তবে আমি কিছু বিটগুলি অনুপস্থিত; এবং অন্যদের কী জানা দরকার?

  1. সকল শিশু প্রক্রিয়া, পশ্চাদপটে করা বা শেল একটি SSH সংযোগের মাধ্যমে খোলা না SIGHUP সঙ্গে হত্যা করা হয় যখন SSH সংযোগ বন্ধ করা হবে শুধুমাত্র যদিhuponexit বিকল্প সেট করা হয়: চালানো shopt huponexitএই যদি সত্য হয় দেখতে।

  2. যদি huponexitসত্য হয়, তবে আপনি শেল থেকে প্রক্রিয়াটি আলাদা করতে nohupবা ব্যবহার করতে পারেন disownযাতে আপনি প্রস্থান করার সময় এটি মারা যায় না। বা, দিয়ে জিনিস চালান screen

  3. যদি huponexitমিথ্যা হয়, যা আজকাল কমপক্ষে কিছু লিনাক্সের মধ্যে ডিফল্ট , তবে ব্যাকগ্রাউন্ড জবসগুলি সাধারণ লগআউটে মারা যাবে না

  4. তবে এটি যদি huponexitমিথ্যাও হয়, তবে যদি ssh সংযোগটি মারা যায় , বা ড্রপ হয় (সাধারণ লগআউটের চেয়ে আলাদা) তবে পটভূমি প্রক্রিয়াগুলি এখনও নিহত হবে। এটি (2) দ্বারা disownবা nohupহিসাবে এড়ানো যায় ।

  5. (ক) প্রসেসগুলির মধ্যে কিছু পার্থক্য রয়েছে যার প্যারেন্ট প্রসেস হ'ল টার্মিনাল এবং (খ) প্রসেসগুলির মধ্যে স্টিডিন, স্টডআউট বা স্টার্ডার টার্মিনালের সাথে সংযুক্ত রয়েছে । (ক) এবং (বি) বা তদ্বিপরীত প্রসেসগুলির কী ঘটে তা আমি জানি না।

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

সম্পাদনা: অন্য একটি গুরুত্বপূর্ণ কাজ হত্যার শিকার হওয়ার উপায়, যে উভয় ক্ষেত্রেই (?) কাজ করে সেগুলি পর্দার মাধ্যমে চালানো । তবে, প্রশ্নটি জিনিসগুলি কখন মারা যায় এবং কখন তা না ঘটে তা বোঝার ক্ষেত্রে আরও বেশি: উদাহরণস্বরূপ, লোকেদের লগআউটে কাজগুলি হত্যার জন্য কখনও কখনও লোকেরা চায়।

আরও থ্রেড: - সিগন্যাল (সিগআপ), চাকরি এবং নিয়ন্ত্রণকারী টার্মিনাল সম্পর্কে স্পষ্টতা - /server/117152/do-background-processes-get-a-sighup-when-logging-off - এসএসএইচ চালিয়ে যান এসএসএইচ বন্ধ করার সময় পটভূমি টাস্ক / কাজ - এসএসএইচ অধিবেশন বন্ধ হওয়ার পরে পটভূমিতে রাখা কোনও কাজ কি চালিয়ে যেতে থাকবে? - এসএসএইচ ক্লায়েন্টটি বন্ধ করার পরে ইতিমধ্যে চলমান ব্যাকগ্রাউন্ড প্রক্রিয়াটি থামানো থেকে বিরত রাখুন - আমি কীভাবে এসএসএইচ দিয়ে কোনও প্রক্রিয়া শুরু করতে পারি যে এটি সংযোগ বিচ্ছিন্ন হওয়ার পরেও এটি চলতে থাকবে? - ওএস এক্স -এ দূরবর্তী কাজ চালিয়ে যেতে অক্ষম - এসএসএইচ সংযোগ বন্ধ করুন

উত্তর:


1

কোনও প্রক্রিয়া "সাইনআপের সাথে হত্যা করা হয় না" - কমপক্ষে শব্দের কঠোর অর্থে নয়। পরিবর্তে, সংযোগটি বাতিল হয়ে গেলে, টার্মিনালের নিয়ন্ত্রণ প্রক্রিয়া (এই ক্ষেত্রে, বাশকে) একটি হ্যাং-আপ সংকেত * প্রেরণ করা হয়, যা সাধারণত "এইচপি সংকেত" সংক্ষেপিত হয় বা কেবল সাইনআপ হয়।

এখন, যখন কোনও প্রক্রিয়া একটি সিগন্যাল পায়, এটি যেভাবেই এটি ** চাইলে এটি পরিচালনা করতে পারে। বেশিরভাগ সিগন্যালের (ডিএইচপি সহ) ডিফল্টটি অবিলম্বে প্রস্থান করা। যাইহোক, প্রোগ্রামটি পরিবর্তে সিগন্যালটিকে উপেক্ষা করতে বা এমনকি কোনও ধরণের সিগন্যাল হ্যান্ডলারের ফাংশন চালানোর জন্য নিখরচায়।

বাশ শেষ বিকল্পটি পছন্দ করে। এর এইচইউপি সিগন্যাল হ্যান্ডলারটি "হুপোনেক্সিট" বিকল্পটি সত্য কিনা তা পরীক্ষা করে দেখেছে এবং যদি তাই হয় তবে তার প্রতিটি শিশু প্রসেসে সাইনগআপ প্রেরণ করে। এর সাথে এটি শেষ হলেই বাশ প্রস্থান করবে।

তেমনি, প্রতিটি শিশু প্রক্রিয়া সিগন্যাল পেলে যা খুশি তা করতে নির্দ্বিধায়: এটি ডিফল্ট হিসাবে সেট করুন (অর্থাত্ তাত্ক্ষণিকভাবে মারা যান), এটিকে উপেক্ষা করুন বা সিগন্যাল হ্যান্ডলারটি চালান।

নোহুপ কেবল শিশু প্রক্রিয়াটির জন্য "অগ্রাহ্য" করার জন্য ডিফল্ট ক্রিয়াটি পরিবর্তন করে। একবার বাচ্চা প্রক্রিয়াটি চালু হয়ে গেলে, এটি সিগন্যালে তার নিজস্ব প্রতিক্রিয়াটি বিনামূল্যে পরিবর্তন করে।

আমি মনে করি, এ কারণেই আপনি কিছু প্রোগ্রাম চালিয়ে গেলেও কিছু প্রোগ্রাম মারা যায়:

  1. Nohup "অগ্রাহ্য" করতে ডিফল্ট ক্রিয়া সেট করে।
  2. প্রোগ্রামটি প্রস্থান করার সময় এক ধরণের ক্লিনআপ করা দরকার, তাই এটি একটি SIGHUP হ্যান্ডলার ইনস্টল করে, ঘটনাক্রমে "উপেক্ষা করুন" পতাকাটি ওভাররাইট করে।
  3. যখন সাইনআপ আসে, হ্যান্ডলারটি চালায়, প্রোগ্রামের ডেটা ফাইলগুলি পরিষ্কার করে (বা যা কিছু করা দরকার) প্রোগ্রামটি থেকে বেরিয়ে যায়।
  4. ব্যবহারকারী হ্যান্ডলার বা ক্লিনআপ সম্পর্কে জানেন না বা যত্ন করেন না এবং কেবল দেখেন যে নোহাপ থাকা সত্ত্বেও প্রোগ্রামটি উপস্থিত রয়েছে।

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

* এবং হ্যাঁ, আপনি জিজ্ঞাসা করার আগে, "হ্যাং-আপ" পরিভাষাটি ইউনিক্সের ডায়ালআপ মেইনফ্রেমের দিনগুলি থেকে বাকি রয়েছে।

** বেশিরভাগ সংকেত, যাইহোক। উদাহরণস্বরূপ, সিগ্কিল সর্বদা প্রোগ্রামটিকে অবিলম্বে, পিরিয়ডের জন্য বন্ধ করে দেয়।


2

পয়েন্ট 1-4 সঠিক are আমি 5 পয়েন্ট সম্পর্কে কিছুই জানি না your আপনার চূড়ান্ত পয়েন্ট হিসাবে, একটি সূক্ষ্ম অ্যাপ্লিকেশন, স্ক্রিন আপনাকে সমস্ত সংযোগগুলি প্রাকৃতিক প্রান্তে চালিয়ে যেতে দেবে, আপনি আপনার সংযোগটি কীভাবে শেষ করেন তা নির্বিশেষে। স্ক্রিনটি ভান্ডারে রয়েছে।

পর্দার লোকটির বর্ণনাটি পড়া সহজ নয়, তবে অন্যান্য জিনিসের মধ্যে এটিতে লেখা আছে:

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

আমি সবচেয়ে গুরুত্বপূর্ণ অংশটি হাইলাইট করেছি: আপনি Ctrl + a + d কমান্ডের সাহায্যে উইন্ডোটি বিচ্ছিন্ন করতে পারেন এবং তারপরে আপনি আপনার সেশনটি মেরে / লগআউট করতে পারেন এবং এখনকার বিচ্ছিন্ন উইন্ডোটি চলতে থাকবে, ভিতরে থাকা প্রোগ্রামগুলি এখনও চলছে। আপনি যখন আবার সংযোগ স্থাপন করবেন, উদাহরণস্বরূপ কোনও নতুন ssh অধিবেশন শুরু করার পরে, স্ক্রীন -r কমান্ডটি স্ক্রিন সেশনটি পুনরায় শুরু করবে যা সমস্ত আউটপুটকে স্ট্যান্ডার্ড ত্রুটি / আউটপুট স্পষ্টভাবে দৃশ্যমান হয়ে যায় det

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