আপনি এখানে ভুল প্রশ্ন জিজ্ঞাসা করছি। অ্যাপ্লিকেশনটি বাইরে থেকে কেবল "একটি বন্দর বন্ধ" করা সম্ভব নয় যা সকেটটি শুনছে। এটি করার একমাত্র উপায় হ'ল বন্দরের মালিকানাধীন প্রক্রিয়াটিকে পুরোপুরি হত্যা করা। তারপরে, প্রায় এক বা দুই মিনিটের মধ্যে, বন্দরটি আবার ব্যবহারের জন্য উপলব্ধ হবে। এখানে যা চলছে তা এখানে (যদি আপনি যত্ন না করেন তবে একটি নির্দিষ্ট বন্দরের মালিকানাধীন প্রক্রিয়াটি কীভাবে হত্যা করতে হয় তা আমি আপনাকে দেখি যেখানে শেষ পর্যন্ত যান):
পোর্টগুলি হ'ল ওএস দ্বারা বিভিন্ন প্রক্রিয়াতে বরাদ্দকৃত সংস্থান। এটি ওএসকে ফাইল পয়েন্টার জিজ্ঞাসা করার অনুরূপ। তবে ফাইল পয়েন্টারগুলির বিপরীতে, এক সময়ে কেবলমাত্র একটি প্রক্রিয়া কোনও পোর্টের মালিক হতে পারে। বিএসডি সকেট ইন্টারফেসের মাধ্যমে, প্রক্রিয়াগুলি কোনও বন্দরে শোনার জন্য একটি অনুরোধ করতে পারে, যা ওএস তারপরে মঞ্জুরি দেয়। ওএস অন্য কোনও প্রক্রিয়া একই বন্দর না পায় তাও নিশ্চিত করবে। যে কোনও সময়ে, প্রক্রিয়াটি সকেটটি বন্ধ করে পোর্টটি প্রকাশ করতে পারে। এর পরে ওএস বন্দরটি পুনরায় দাবি জানাবে। বিকল্পভাবে, যদি প্রক্রিয়াটি বন্দরটি প্রকাশ না করেই শেষ হয়, অবশেষে ওএস পোর্টটিকে পুনরায় দাবি জানাবে (যদিও এটি তাত্ক্ষণিকভাবে ঘটবে না: এটি কয়েক মিনিট সময় নেবে)।
এখন, আপনি যা করতে চান (কেবল কমান্ড-লাইন থেকে পোর্টটি বন্ধ করুন), দুটি কারণে সম্ভব নয়। প্রথমত, যদি এটি সম্ভব হয় তবে এর অর্থ হ'ল একটি প্রক্রিয়া কেবল অন্য প্রক্রিয়ার সংস্থান (পোর্ট) চুরি করতে পারে। সুবিধাজনক প্রক্রিয়াগুলিতে সীমাবদ্ধ না থাকলে এটি খারাপ নীতি হবে। দ্বিতীয় কারণটি হ'ল এটি স্পষ্ট নয় যে যদি বন্দরের মালিকানাধীন প্রক্রিয়াটির কী হবে তবে আমরা যদি এটি চালিয়ে যেতে পারি। প্রক্রিয়াটির কোডটি এই সংস্থানটির মালিকানাধীন বলে ধরে নেওয়া হয়। আমরা যদি এটিকে সহজভাবে সরিয়ে নিয়ে যাই তবে এটি নিজেরাই ক্রাশ হয়ে যাবে, সুতরাং কোনও সুবিধাযুক্ত প্রক্রিয়া হলেও ওএস আপনাকে এটি করতে দেয় না। পরিবর্তে, আপনি কেবল তাদের হত্যা করতে হবে।
যাইহোক, একটি নির্দিষ্ট পোর্টের মালিকানাধীন একটি প্রক্রিয়াটি কীভাবে হত্যা করবেন তা এখানে রয়েছে:
sudo netstat -ap | grep :<port_number>
এটি প্রক্রিয়া হোল্ডিং পোর্টের সাথে সম্পর্কিত লাইন আউটপুট দেবে, উদাহরণস্বরূপ:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
এই ক্ষেত্রে, প্রোহোল্ডিংপোর্টটি বন্দরটি খোলার প্রক্রিয়ার নাম, 4683 এটির পিড এবং 8000 (নোট করুন এটি টিসিপি) হ'ল পোর্ট নম্বর এটি ধারণ করে।
তারপরে, সর্বশেষ কলামে দেখুন, আপনি / দেখতে পাবেন। তারপরে এটি কার্যকর করুন:
kill <pid>
যদি এটি কাজ না করে (আপনি নেটট্যাট কমান্ডটি পুনরায় চালিয়ে চেক করতে পারেন)। এটা কর:
kill -9 <pid>
সাধারণভাবে, আপনি যদি পারেন তবে সিগ্কিল পাঠানো এড়ানো ভাল। এই কারণেই আমি আপনাকে kill
আগে চেষ্টা করতে বলি kill -9
। শুধু ব্যবহার করে kill
মৃদু স্বাক্ষর প্রেরণ করে।
যেমনটি আমি বলেছিলাম, আপনি যদি এটি করেন তবে পোর্টটি পুনরায় খোলা হতে কয়েক মিনিট সময় লাগবে। আমি এটির গতি বাড়ানোর কোনও উপায় জানি না। অন্য কেউ যদি করেন তবে আমি এটি শুনতে পছন্দ করব।