একটি নির্দিষ্ট বন্দরে প্রক্রিয়া পিড শ্রবণ নির্ধারণ করুন


101

শিরোনাম অনুসারে, আমি একাধিক গেম সার্ভার চালাচ্ছি এবং তাদের প্রত্যেকেরই একই nameতবে ভিন্ন PIDএবং portসংখ্যা রয়েছে। আমি PIDনির্দিষ্ট পোর্টে যেসব সার্ভার শুনছে তার সাথে মিলে যেতে চাই এবং তারপরে আমি এই প্রক্রিয়াটি শেষ করতে চাই। আমার বাশ স্ক্রিপ্টটি সম্পূর্ণ করার জন্য আমার এটি দরকার।

এটা কি সম্ভব? কারণ এটি ওয়েবে এখনও কোনও সমাধান খুঁজে পায় নি।

উত্তর:


125

-pপতাকা netstatআপনি প্রক্রিয়ার PID দেয়:

netstat -l -p

সম্পাদনা: ফ্রিবিএসডি-তে সকেট ব্যবহারকারীদের পিআইডি পেতে যে কমান্ডটি প্রয়োজন তা হ'ল sockstat। আমরা @ সাইক্লোন দিয়ে আলোচনার সময় যেভাবে কাজ করেছি, কাজটি করানো রেখাটি হ'ল:

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1

4
netstat: 80: unknown or uninstrumented protocolব্যবহৃত 80purpoes পরীক্ষার জন্য (nginx) Port। কাজ হয়নি।
ঘূর্ণিঝড়

5
netstat -nlp | grep :80পরিবর্তে চেষ্টা করুন
stanwise

12
netstat: option requires an argument -- p
ঘূর্ণিঝড়

4
সাইজউইনকে @ জেসনবার্টইটনে উইন্ডোজ নেটিভ netstatবলা হয়। এটিতে অন্যান্য বাক্য গঠন রয়েছে।
stanwise

4
এই উত্তরটি ভুল: নেটস্ট্যাট: বিকল্পের জন্য একটি আর্গুমেন্ট দরকার - পি
ভাল ব্যক্তি

143

শর্ট সংস্করণ যা আপনি কমান্ড কমানোর জন্য পাস করতে পারেন:

lsof -i:80 -t

13
এর মধ্যে এমন কিছু প্রক্রিয়াও রয়েছে যা সেই বন্দরে সংযুক্ত রয়েছে । lsof -i4TCP:80 -sTCP:LISTEN -tপরিবর্তে সম্ভবত আপনি কি চান।
নেভির ২

ঠিক আমি খুঁজছেন ছিল কি. আমি যে প্রক্রিয়াটি চলছে তার সন্ধান করে একটি প্রক্রিয়াটি হত্যা করতে চেয়েছিলাম।
mythicalcoder

@ নেভির "আপনি সেই বন্দরের সাথে সংযুক্ত প্রক্রিয়াগুলিও অন্তর্ভুক্ত করেছেন" এর অর্থ কী? আপনি দয়া করে ব্যাখ্যা করতে পারেন?
কিশোরের 777

4
kill -9 `lsof -i:80 -t`অনুলিপি করার জন্য
বিএমজরো

17

netstat -p -l | grep $PORTএবং lsof -i :$PORT সমাধানগুলি ভাল তবে আমি fuser $PORT/tcpপাইস coreutilsহিসাবে পোসিক্সে (যা কাজ করে ) এক্সটেনশন সিনট্যাক্সকে পছন্দ করি :

pid=`fuser $PORT/tcp`

এটি খাঁটি পিড প্রিন্ট করে যাতে আপনি sedযাদু বাদ দিতে পারেন ।

fuserআমার প্রেমিক সরঞ্জামকে পরিণত করার একটি জিনিস হ'ল সরাসরি সেই প্রক্রিয়াটিতে সংকেত প্রেরণ করার ক্ষমতা (এই বাক্য গঠনটি পসিক্সেও প্রসারিত):

$ fuser -k $port/tcp       # with SIGKILL
$ fuser -k -15 $port/tcp   # with SIGTERM
$ fuser -k -TERM $port/tcp # with SIGTERM

এছাড়াও-কে ফ্রিবিএসডি দ্বারা সমর্থিত: http://www.freebsd.org/cgi/man.cgi?query=fuser


4
আমাদের পরিষ্কার ও সংক্ষিপ্ত করে
তোলে

10

netstat -nlp কোন বন্দরে কী শুনছে তার পিআইডি আপনাকে জানাতে হবে।


4
netstat: 80: unknown or uninstrumented protocolব্যবহৃত 80purpoes পরীক্ষার জন্য (nginx) Port। কাজ হয়নি।
ঘূর্ণিঝড়

3

যেহেতু সোকস্ট্যাটটি আমার মেশিনে স্থানীয়ভাবে ইনস্টল করা হয়নি আমি তার পরিবর্তে নেটস্যাট ব্যবহার করার জন্য স্ট্যানওয়াইজের উত্তর হ্যাক করেছি ..

netstat -nlp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:2000" | awk '{print $7}' | sed -e "s/\/.*//g""

3

আমি প্রোগ্রামটিমেটিকভাবে চেয়েছিলাম - কেবল বাশ ব্যবহার করে - প্রদত্ত বন্দরে শুনার প্রক্রিয়াটি মেরে ফেললাম ।

ধরা যাক বন্দরটি 8089, তারপরে আমি এটি কীভাবে করেছি:

badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1)
kill -9 $badPid

আমি আশা করি এটি অন্য কাউকে সাহায্য করবে! আমি জানি এটি আমার দলকে সাহায্য করবে।


4
এটি করতে আমি এখানে ফাংশনটি ব্যবহার করেছি: function kill-listener { lsof -i:$1 -t | xargs kill -9 }8089 বন্দরের আপনার উদাহরণটি ব্যবহার করে:kill-listener 8089
হারিকেন হ্যামিল্টন

3

বাক্য গঠন:

কিল -9 $ (lsof -t -i: Portnumber)

উদাহরণ: 4200 পোর্টে চলমান প্রক্রিয়াটি হ্রাস করতে নিম্নলিখিত কমান্ডটি চালান

kill -9 $(lsof -t -i:4200)

উবুন্টুতে পরীক্ষিত।


2

উইন্ডোজে, পিডের নেটসট্যাট বিকল্পটি -o এবং -p একটি প্রোটোকল ফিল্টার নির্বাচন করে, যেমন: নেটসট্যাট -a -p টিসিপি -o

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