প্রসেসগুলি প্রস্থান করার সময় উইন্ডোজ কি সকেট বন্ধ করার যত্ন নেয়?


12

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

উত্তর:


10

উইন্ডোজ এবং ইউনিক্সেন উভয় ক্ষেত্রে, যখন কোনও প্রক্রিয়া কার্নেল থেকে প্রস্থান করে তখন সমস্ত খোলা হ্যান্ডলগুলি বন্ধ করে দেয়।

উইন্ডোজ এনটি

একটি প্রক্রিয়া সমাপ্তি - এমএসডিএন

একটি প্রক্রিয়া সমাপ্ত করার নিম্নলিখিত ফলাফল রয়েছে:

  • [...]
  • প্রক্রিয়া দ্বারা বরাদ্দকৃত যে কোনও সংস্থানগুলি মুক্তি দেওয়া হয়।
  • সমস্ত কার্নেল বস্তু বন্ধ রয়েছে are
  • [...]

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

ExitProcessফাংশন - এমএসডিএন

একটি প্রক্রিয়া থেকে বেরিয়ে আসার কারণে নিম্নলিখিতগুলি ঘটে:

  • [...]
  • প্রক্রিয়া দ্বারা খোলার সমস্ত অবজেক্ট হ্যান্ডেলগুলি বন্ধ রয়েছে।
  • [...]

লিনাক্স

exit(3) - লিনাক্স প্রোগ্রামার এর ম্যানুয়াল (libc ফাংশন)

সমস্ত ওপেন স্টিডিও (3) স্ট্রিমগুলি ফ্লাশ এবং বন্ধ হয়ে গেছে।

_exit(2) - লিনাক্স প্রোগ্রামার ম্যানুয়াল (কার্নেল সিস্কল)

ফাংশন _exit()"তাত্ক্ষণিকভাবে" কলিং প্রক্রিয়াটি বন্ধ করে দেয়। প্রক্রিয়া সম্পর্কিত কোনও উন্মুক্ত ফাইল বর্ণনাকারী বন্ধ রয়েছে; প্রক্রিয়াটির যে কোনও বাচ্চা প্রক্রিয়া 1, init দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং প্রক্রিয়াটির পিতামাতাকে একটি SIGCHLD সংকেত প্রেরণ করা হয়।


নোট করুন যে উভয় অপারেটিং সিস্টেমে,

  1. সকেটগুলি কেবলমাত্র এক ধরণের ফাইল বর্ণনাকারী (এফডি এর) / কার্নেল অবজেক্টস, তাই উপরের ফাইল এবং সকেটের ক্ষেত্রে সমানভাবে প্রযোজ্য।

  2. ইউনিক্স ফাইল বিবরণ, সেইসাথে বস্তুর হ্যান্ডলগুলি Windows এ কার্নেল বস্তু, মালিকানাধীন যাবে একাধিক প্রসেস - তারা তাদের হ্যান্ডলগুলি শিশু প্রক্রিয়ার মাধ্যমে উত্তরাধিকারসূত্রে করা যেতে পারে এবং এমনকি বিশেষ আইপিসি ফাংশন ব্যবহার করে প্রায় পাস।

  3. কোনও ফাইল বা সকেট কেবল তখনই বন্ধ থাকে যখন এতে সমস্ত এফডির নির্দেশকটি নষ্ট হয়ে যায়।


2
টিসিপি সকেটগুলি তাদের বিশেষ TIME_WAIT রাজ্যের কারণে একটি বিশেষ কেস। উদাহরণস্বরূপ, যদি আপনি কোনও টিসিপি পোর্টে শুনার কোনও অ্যাপ্লিকেশনটি বন্ধ করে দেন তবে আপনি প্রায়শই একই বন্দরে অবিলম্বে বাঁধতে পারবেন না।
হাইমগ

2
নং ফাইল বর্ণনাকারী এবং অবজেক্ট হ্যান্ডলগুলির মালিকানাধীন এবং কেবলমাত্র একটি প্রক্রিয়াতে অ্যাক্সেসযোগ্য এবং প্রতি-প্রক্রিয়া সত্তা কঠোরভাবে । এটি ফাইলের বিবরণ এবং অন্তর্নিহিত অবজেক্ট যা প্রক্রিয়াগুলির মধ্যে ভাগ করা হয়।
JdeBP

5

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

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

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


3

হ্যাঁ এটা করে. সেই প্রার্থনা এভাবে ইন্দ্রিয় জানালা হয়েছে 3.1 95 98 এক্সপি (অন্তত আমি এক্সপি থেকে নিশ্চিত জানি)।


1
না, তা হয়নি। উইন্ডোজ যেহেতু NT তে সংস্করণ 3. 5 , সম্ভবত। সকেটে যখন ডস-উইন্ডোজ ছিল উইন্ডোজ এনটি-তে খুব আলাদা প্রাণী; এবং ডস-উইন্ডোজ 95 উল্লেখযোগ্যভাবে ডস-উইন্ডোজ 3.1 থেকে পৃথক ছিল। উইন 16 অ্যাপ্লিকেশনগুলিতে কল করা দরকার ছিল WSACleanup()অন্যথায় ফাঁস হয়েছিল; ডস-উইন্ডোজ 9 এক্স-তে একটি বাজে সমস্যা ছিল, এমএসকেবি নিবন্ধ # 156319-এ নথিবদ্ধ, পিতামাতার প্রসেসগুলি অকার্যকর সকেটগুলি তাদের বাচ্চাদের কাছে প্রেরণ করে, ডস-উইন্ডোজ'র পরিবর্তে সকেটের জন্য আলাদা প্রক্রিয়া থেকে বেরিয়ে আসার শব্দার্থক কারণে ঘটে।
JdeBP

1
@ জেডিবিপি: উইন্ডোজ এনটি 3 সম্পর্কে কী ? 1 - এটি স্বয়ংক্রিয়ভাবে ক্লিনআপ সম্পাদন করেছে?
ব্যবহারকারীর 6868 13

1
৩.১ এর প্রথম স্থানে সকেট ছিল না।
জেডিবিপি

... ভাল কথা, @ জেডিবিপি - আমি এটি ভেবে দেখিনি।
ব্যবহারকারীর 6868

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