আমি ম্যাকের টার্মিনাল থেকে কীভাবে একটি মুক্ত পোর্ট বন্ধ করব?


198

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


1
কীভাবে আপনি এই বন্দরটি খুললেন? আপনি জাভা অ্যাপ্লিকেশনটিতে বা ফায়ারওয়াল থেকে পোর্টগুলি খোলা এবং বন্ধ করার কথা বলছেন কিনা তা পরিষ্কার নয়।
mariosangiorgio

উত্তর:


396
  1. আপনি মুক্ত করতে চান এমন পোর্ট নম্বর (উদাহরণস্বরূপ, 5955) দখল করা প্রক্রিয়া আইডি (পিআইডি) সন্ধান করুন

    sudo lsof -i :5955
    
  2. প্রক্রিয়াটি বর্তমানে বন্দরটি তার পিআইডি ব্যবহার করে ব্যবহার করছে তা হত্যা করুন

    sudo kill -9 PID
    

32
-9 প্রেরণ কোনও প্রক্রিয়া হত্যার প্রথম প্রচেষ্টা হওয়া উচিত নয় এবং এটি খুব খারাপ অভ্যাস। আমার মনে আছে, আপনার প্রথমে ব্যবহার করা উচিত kill PID(যা বোঝায় -15), তারপরে -2 এবং -1 চেষ্টা করুন। -9 শেষ অবলম্বন শুধুমাত্র যদি হয় যে অন্যান্য অপশন কাজ করতে ব্যর্থ হয়েছে।
মীউ

3
@ মিউ দ্বারা প্রস্তাবিত কোনও পতাকা ছাড়াই পিআইডি মেরে ফেলেছিল এবং এটি আমার জন্য কাজ করেছে
টনি লেই

39

প্রক্রিয়াটি খুঁজে পেতে চেষ্টা করুন:

sudo lsof -i :portNumber

প্রক্রিয়াটি বর্তমানে বন্দরটি তার পিআইডি ব্যবহার করে ব্যবহার করছে তা হত্যা করুন

kill PID

এবং তারপরে বন্দরটি বন্ধ হয়েছে কিনা তা পরীক্ষা করে দেখুন। যদি না হয়, চেষ্টা করুন:

kill -9 PID

পূর্ববর্তী কাজ না হলে আমি কেবল নিম্নলিখিতটি করতাম

sudo kill -9 PID

শুধু নিরাপদ থাকতে। আবার আপনি কীভাবে বন্দরটি খোলেন তার উপর নির্ভর করে, এটি কোনও ব্যাপার নয়।


26

তবে আপনি বন্দরটি খোলেন, আপনি এটি একইভাবে বন্ধ করুন। উদাহরণস্বরূপ, যদি আপনি কোনও সকেট তৈরি করেন তবে এটি 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 ঠিকানা দেখতে পারেন ।


24

5900 খুব সহজ বন্দর:

sudo lsof -i :5900

তারপরে পিআইডি হিসাবে 59553 বিবেচনা করুন

sudo kill 59553

1
এটি বিদ্যমান উত্তরের সাথে কিছু যোগ করে না!
نفرتে

16

2018 সালে এখানে ম্যাকস হাইসিয়ার ব্যবহার করে আমার জন্য কী কাজ করেছে:

sudo lsof -nPi: yourPortNumber

তারপর:

sudo হত্যা -9 আপনার পিআইডি নাম্বার


1
lsof -nPiকিছুটা ভাল কারণ পোর্ট নম্বরটি আউটপুটে আসলে দৃশ্যমান এবং আপনি কী হত্যা করছেন সে সম্পর্কে আপনি আরও ভাল অনুভূতি পান।
ধনী পাথর

1
: এছাড়াও সহায়ক সব শোনার পোর্ট 'তথ্য দেখতেsudo lsof -nPi | grep LISTEN
লিয়ান

14

একটি লাইনার সেরা

kill -9 $(lsof -i:PORT -t) 2> /dev/null

উদাহরণ: ম্যাকের উপর, 9604 বন্দরটি সাফ করতে চেয়েছিল Following নিম্নলিখিত কমান্ডটি কবজির মতো কাজ করেছে

 kill -9 $(lsof -i:9604 -t) 2> /dev/null 

6

কোনও বিশেষ পোর্টের মালিকানাধীন কোনও প্রক্রিয়া হ'তে আপনি এই প্রথম আদেশটিও ব্যবহার করতে পারেন:

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) না এড়ানো ভাল।

চিয়ার্স,

গাই।


5

আমি lsofএকত্রিত ব্যবহারkill উপরে বর্ণিত হিসাবে ; তবে এই প্রক্রিয়াটি স্বয়ংক্রিয় করার জন্য একটি দ্রুত সামান্য বাশ স্ক্রিপ্ট লিখেছিল।

এই স্ক্রিপ্টের সাহায্যে আপনি killport 3000যে কোনও জায়গা থেকে সহজেই টাইপ করতে পারেন এবং এটি বন্দরে চলমান সমস্ত প্রক্রিয়াটি মেরে ফেলবে 3000

https://github.com/xtrasimplicity/killport


1
আপনি আমার দিন বাঁচিয়েছেন। কোনও কারণে কিছু ফিরে না আসার কারণে lsofএবং killআমার স্ক্রিপ্টটি ম্যাকওএস সিয়েরাতে ঝুলিয়ে রেখেছে। কিন্তু killportএকটি কবজ মত কাজ করে এবং দ্রুত। ধন্যবাদ!
wout

4

আমি এই উদ্দেশ্যে একটি ফাংশন তৈরি করেছি।

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

আপনার টার্মিনালে কোডের এই ব্লকটি অনুলিপি করুন এবং আটকানো আপনার কাঙ্ক্ষিত পোর্টটি মুক্ত করবে। শুধু শেষ লাইনে পোর্ট নম্বর পরিবর্তন মনে রাখবেন।



1

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


-1
  1. প্রথমে প্রসেস আইডি (পিড) সন্ধান করুন যা প্রয়োজনীয় বন্দরটি দখল করেছে eg (যেমন 5434)

    পিএস অক্স | গ্রেপ 5434

এই প্রক্রিয়াটিকে হত্যা করুন ill

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