আমি একটি ক্লায়েন্টের সাথে যোগাযোগ করতে জাভা ক্লাস থেকে # 5955 পোর্ট খুলেছি। আমার কাজ শেষ হওয়ার পরে আমি কীভাবে এই বন্দরটি বন্ধ করব? এবং বন্দরটি খোলা বা বন্ধ থাকলে কোন আদেশ আমাকে প্রদর্শন করতে পারে?
আমি একটি ক্লায়েন্টের সাথে যোগাযোগ করতে জাভা ক্লাস থেকে # 5955 পোর্ট খুলেছি। আমার কাজ শেষ হওয়ার পরে আমি কীভাবে এই বন্দরটি বন্ধ করব? এবং বন্দরটি খোলা বা বন্ধ থাকলে কোন আদেশ আমাকে প্রদর্শন করতে পারে?
উত্তর:
আপনি মুক্ত করতে চান এমন পোর্ট নম্বর (উদাহরণস্বরূপ, 5955) দখল করা প্রক্রিয়া আইডি (পিআইডি) সন্ধান করুন
sudo lsof -i :5955
প্রক্রিয়াটি বর্তমানে বন্দরটি তার পিআইডি ব্যবহার করে ব্যবহার করছে তা হত্যা করুন
sudo kill -9 PID
kill PID
(যা বোঝায় -15), তারপরে -2 এবং -1 চেষ্টা করুন। -9 শেষ অবলম্বন শুধুমাত্র যদি হয় যে অন্যান্য অপশন কাজ করতে ব্যর্থ হয়েছে।
প্রক্রিয়াটি খুঁজে পেতে চেষ্টা করুন:
sudo lsof -i :portNumber
প্রক্রিয়াটি বর্তমানে বন্দরটি তার পিআইডি ব্যবহার করে ব্যবহার করছে তা হত্যা করুন
kill PID
এবং তারপরে বন্দরটি বন্ধ হয়েছে কিনা তা পরীক্ষা করে দেখুন। যদি না হয়, চেষ্টা করুন:
kill -9 PID
পূর্ববর্তী কাজ না হলে আমি কেবল নিম্নলিখিতটি করতাম
sudo kill -9 PID
শুধু নিরাপদ থাকতে। আবার আপনি কীভাবে বন্দরটি খোলেন তার উপর নির্ভর করে, এটি কোনও ব্যাপার নয়।
তবে আপনি বন্দরটি খোলেন, আপনি এটি একইভাবে বন্ধ করুন। উদাহরণস্বরূপ, যদি আপনি কোনও সকেট তৈরি করেন তবে এটি 0.0.0.0:5955 পোর্টে আবদ্ধ করুন এবং শুনুন বলা হয়ে থাকে, একই সকেটটি বন্ধ করুন।
আপনি কেবল যে প্রক্রিয়াটিতে পোর্ট খোলা আছে তাও খুন করতে পারেন।
কোন প্রক্রিয়াটিতে কোনও বন্দর খোলা আছে তা যদি আপনি জানতে চান তবে এটি ব্যবহার করে দেখুন:
lsof -i :5955
আপনি যদি কোনও বন্দরটি খোলা আছে কিনা তা জানতে চান, আপনি একই lsof কমান্ডটি করতে পারেন (যদি কোনও প্রক্রিয়া এটি খোলা থাকে, এটি উন্মুক্ত; অন্যথায়, এটি নেই), অথবা আপনি কেবল এটির সাথে সংযোগ দেওয়ার চেষ্টা করতে পারেন, যেমন:
nc localhost 5955
যদি এটি কোনও আউটপুট না দিয়ে অবিলম্বে ফিরে আসে, পোর্টটি খোলা হবে না isn't
প্রযুক্তিগতভাবে বলতে গেলে এটি উল্লেখ করার মতো হতে পারে যে এটি কোনও বন্দর নয় যা খোলা আছে, তবে একটি হোস্ট: পোর্ট সংমিশ্রণ। উদাহরণস্বরূপ, আপনি যদি 10.0.1.2 হিসাবে ল্যানে প্লাগ ইন করেন তবে আপনি একটি সকেটকে অন্যটিকে প্রভাবিত না করে 127.0.0.1:5955 বা 10.0.1.2:5955 তে বেঁধে রাখতে পারেন, বা আপনি 0.0.0.0 এ আবদ্ধ হতে পারেন : 5955 একবারে উভয় পরিচালনা করতে। ifconfig
কমান্ডটি দিয়ে আপনি আপনার কম্পিউটারের সমস্ত আইপিভি 4 এবং আইপিভি 6 ঠিকানা দেখতে পারেন ।
2018 সালে এখানে ম্যাকস হাইসিয়ার ব্যবহার করে আমার জন্য কী কাজ করেছে:
sudo lsof -nPi: yourPortNumber
তারপর:
sudo হত্যা -9 আপনার পিআইডি নাম্বার
lsof -nPi
কিছুটা ভাল কারণ পোর্ট নম্বরটি আউটপুটে আসলে দৃশ্যমান এবং আপনি কী হত্যা করছেন সে সম্পর্কে আপনি আরও ভাল অনুভূতি পান।
sudo lsof -nPi | grep LISTEN
কোনও বিশেষ পোর্টের মালিকানাধীন কোনও প্রক্রিয়া হ'তে আপনি এই প্রথম আদেশটিও ব্যবহার করতে পারেন:
sudo netstat -ap | grep :<port_number>
উদাহরণস্বরূপ, বলুন যে এই প্রক্রিয়াটি 8000 টিসিপি পোর্ট ধরে , তারপরে কমান্ডটি চালাচ্ছে:
sudo netstat -ap | grep :8000
প্রক্রিয়াটি হোল্ডিং পোর্ট 8000 সম্পর্কিত লাইনটিকে আউটপুট দেবে , উদাহরণস্বরূপ:
tcp 0 0 *:8000 *:* LISTEN 4683/procHoldingPort
এই ক্ষেত্রে, প্রোহোল্ডিংপোর্টটি বন্দরটি খোলার প্রক্রিয়ার নাম, 4683 এর পিড, এবং 8000 (নোট করুন এটি টিসিপি) হ'ল পোর্ট নম্বরটি (যা আপনি বন্ধ করতে চান)।
তারপরে উপরের উদাহরণটি অনুসরণ করে প্রক্রিয়াটি হত্যা করুন:
kill 4683
অন্যরা এখানে যেমন উল্লেখ করেছে, এটি যদি কাজ না করে (আপনি যুক্তি হিসাবে -9 দিয়ে হত্যা ব্যবহার করতে পারেন):
kill -9 4683
আবার সাধারণভাবে, আপনি যদি পারেন তবে সিগ্কিল (-9) না এড়ানো ভাল।
চিয়ার্স,
গাই।
আমি lsof
একত্রিত ব্যবহারkill
উপরে বর্ণিত হিসাবে ; তবে এই প্রক্রিয়াটি স্বয়ংক্রিয় করার জন্য একটি দ্রুত সামান্য বাশ স্ক্রিপ্ট লিখেছিল।
এই স্ক্রিপ্টের সাহায্যে আপনি killport 3000
যে কোনও জায়গা থেকে সহজেই টাইপ করতে পারেন এবং এটি বন্দরে চলমান সমস্ত প্রক্রিয়াটি মেরে ফেলবে 3000
।
lsof
এবং kill
আমার স্ক্রিপ্টটি ম্যাকওএস সিয়েরাতে ঝুলিয়ে রেখেছে। কিন্তু killport
একটি কবজ মত কাজ করে এবং দ্রুত। ধন্যবাদ!
আমি এই উদ্দেশ্যে একটি ফাংশন তৈরি করেছি।
function free_port() {
if [ -z $1 ]
then
echo no Port given
else
PORT=$1;
PID=$(sudo lsof -i :$PORT) # store the PID, that is using this port
if [ -z $PID ]
then
echo port: $PORT is already free.
else
sudo kill -9 $PID # kill the process, which frees the port
echo port: $PORT is now free.
fi
fi
}
free_port 80 # you need to change this port number
আপনার টার্মিনালে কোডের এই ব্লকটি অনুলিপি করুন এবং আটকানো আপনার কাঙ্ক্ষিত পোর্টটি মুক্ত করবে। শুধু শেষ লাইনে পোর্ট নম্বর পরিবর্তন মনে রাখবেন।
চলমান বন্দরটি ধরে নিচে ধরে ধরে দেখুন 8000
:
free-port() { kill "$(lsof -t -i :8000)"; }
আমি এখানে রেফারেন্স পেয়েছি
প্রথমে প্রসেস আইডি (পিড) সন্ধান করুন যা প্রয়োজনীয় বন্দরটি দখল করেছে eg (যেমন 5434)
পিএস অক্স | গ্রেপ 5434
এই প্রক্রিয়াটিকে হত্যা করুন ill
kill -9 <pid>