লিনাক্সের নির্দিষ্ট পোর্টে চলমান একটি প্রক্রিয়া কীভাবে হত্যা করবেন?


757

আমি ./shutdown.shটমক্যাট /binডিরেক্টরিটি ব্যবহার করে টমক্যাটটি বন্ধ করার চেষ্টা করেছি । তবে দেখা গেছে যে সার্ভারটি সঠিকভাবে বন্ধ ছিল না। এবং এইভাবে আমি পুনরায় আরম্ভ করতে অক্ষম ছিলাম
আমার টমক্যাটটি বন্দরে চলছে 8080

আমি টমক্যাট প্রক্রিয়াটি চালিয়ে যেতে চাই 8080। কোন প্রক্রিয়াটি হত্যা করা হবে তা নির্বাচন করার জন্য আমি প্রথমে একটি নির্দিষ্ট বন্দর (8080) এ প্রক্রিয়াগুলির তালিকা পেতে চাই।


উত্তর:


933

এটি fuser 8080/tcpআপনাকে সেই বন্দরে আবদ্ধ প্রক্রিয়ার পিআইডি মুদ্রণ করবে will

এবং এটি fuser -k 8080/tcpসেই প্রক্রিয়াটিকে হত্যা করবে।

শুধুমাত্র লিনাক্সে কাজ করে। আরও সার্বজনীন ব্যবহার lsof -i4(বা আইপিভি 6 এর জন্য 6)।


2
এটিও কি সম্ভাব্য সংযুক্ত সকেটটি 8080 এর সাথে বন্ধ করে দেয়?
ফের

9
এটি বন্দরটি সঠিকভাবে বন্ধ করে না। পোর্টেন্ট প্রসেসটি মারা যাওয়ার পরে বন্দরটি TIME_WAIT রাজ্যে রাখা হয়েছে। এরপরে ওএস শেষ পর্যন্ত প্রায় 60 সেকেন্ড পরে পোর্টটি পুরোপুরি বন্ধ করে দেবে। এর অর্থ হল আপনি বন্দরটি কমপক্ষে 60 সেকেন্ডের জন্য পুনরায় ব্যবহার করতে পারবেন না (যদি না আপনি সকেটে পুনরায় ব্যবহারের বিকল্পটি না দেন)।
লাকাটা

2
ডারউইনে, অবশ্যই একটি ভিন্ন সংস্করণ ব্যবহার করা উচিত fuser। কেবল একটি ফাইল নেয়, সমর্থন করে না -k
এপি

3
'fuser -k -n tcp 8080' প্রক্রিয়াটিও মারবে
হেশাম ইয়াসিন

7
@dbliss fuser is psmisc এর অংশ। যদি আপনি পান তবে fuser: command not foundpsmisc ইনস্টল করুন। সেন্টোস / আরএইচএল 7 এর জন্য, চালানsudo yum install psmisc
টম

699

8080 বন্দর শোনার যে কোনও প্রক্রিয়া তালিকা করতে:

lsof -i:8080

8080 বন্দর শোনার যে কোনও প্রক্রিয়া হত্যার জন্য:

kill $(lsof -t -i:8080)

বা আরও সহিংসভাবে:

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

( -9সাথে সঙ্গতিপূর্ণ SIGKILL - terminate immediately/hard killসংকেত: দেখতে বধ সংকেত তালিকা এবং হত্যা-ইন-কমান্ড -9 বিকল্পের উদ্দেশ্য কী? কোন সংকেত নির্দিষ্ট হয়। killশব্দটি সংকেত ওরফে -15বা soft killপাঠানো হয়, যা কখনও যথেষ্ট হত্যা করতে নয় একটি প্রক্রিয়া.).


9
হত্যা: ব্যবহার: হত্যা [-s সিগস্পেক | -n সিগন্যাম | -সিগস্পেক] পিড | জবস্পেক ... বা হত্যা-এল [সিগস্পেক] আমি যখন আপনার আদেশগুলি কার্যকর করি তখন
এটিই পাচ্ছি

2
@ সুধীরবেলাগলি আপনি এটি সুপার ইউজার দিয়ে করেছেনsudo
মার্সেল জাজমান

5
আমার ম্যাকের পাশাপাশি কাজ করেছেন
asherbar

2
আমি যোগ করতে চাই যে কখনও কখনও আপনার কাছে প্রক্রিয়া আইডি দেখার অনুমতি নেই তবে সেক্ষেত্রে আপনার করা দরকার sudo lsof -i:8080
আকাওয়াল

1
দ্বিতীয় টিপস কেন আরও সহিংস?
ওয়েবউইম্যান

281

কমান্ডটি ব্যবহার করুন

 sudo netstat -plten |grep java

তাদের প্রক্রিয়া grep javaহিসাবে tomcatব্যবহার javaহিসাবে ব্যবহৃত ।

এটি পোর্ট নম্বর এবং প্রসেস আইডি সহ প্রক্রিয়াগুলির তালিকা প্রদর্শন করবে

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

আগের সংখ্যাটি /javaএকটি প্রক্রিয়া আইডি। killপ্রক্রিয়াটি মেরে ফেলতে এখন কমান্ডটি ব্যবহার করুন

kill -9 16085

-9 প্রক্রিয়াটি জোর করে হত্যা করা হবে বলে বোঝায়।


11
আপনি যুক্ত করতে চাইতে পারেন যে এর মাধ্যমে প্রক্রিয়াটির নাম পেতে কোনওটির জন্য বিশেষাধিকারের প্রয়োজন হতে পারে netstat
জোনাস শোফার

2
@ জোনাস উইলিকি আপনি নিজেরাই যে ডাব্লু / আউট রুট সুবিধাগুলির মালিক তা দেখতে পারেন।
dbliss

নেটস্যাট এর জন্য আমার রুট সুবিধার দরকার ছিল। প্রক্রিয়াটি আসলে কী জানার কোনও উপায় আছে? যতদূর আমি বলতে পারি আমি সমস্ত অ্যাপ্লিকেশন বন্ধ করে দিয়েছি তবে এটি সম্ভবত টার্মিনাল উইন্ডো থেকে এসেছে যেখানে আমি অজান্তেই প্রক্রিয়াগুলিকে ব্যাকগ্রাউন্ড টাস্কে ঠেলে দিয়েছি। প্রথমে সমস্ত প্রক্রিয়া দেখার জন্য আমার 'টার্মিনাল কমান্ড' পিএস করা উচিত ছিল ...
জেসিবয়েড

150

আমি নির্দিষ্ট পোর্টে কেবল LISTEN মারার জন্য এই ওয়ান-লাইনারটি যুক্ত করব:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)


9
আমি মনে করি এটি সেরা উত্তর হওয়া উচিত। ধন্যবাদ @ গাল ব্রাচা
সাম কাহ চিইন

2
এটি সেরা সমাধান কারণ এটি আমার ব্রাউজারটিকেও হত্যা করে না!
রুশো

সেরা উত্তর! সরল, সংক্ষিপ্ত এবং সঠিকভাবে কাজটি করে।
জার বোম্বা

116

আপনি lsof কমান্ড ব্যবহার করতে পারেন। এখানে যেমন পোর্ট নম্বর 8090 হয় যাক

lsof -i:8090

এই কমান্ডটি এই বন্দরে মুক্ত প্রক্রিয়াগুলির একটি তালিকা ফেরত দেয়।

কিছুটা এইরকম…

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

বন্দরটি মুক্ত করতে, এটি ব্যবহার করে প্রক্রিয়াটি মেরে ফেলুন (প্রক্রিয়াটির আইডি 75782)…

kill -9 75782

এই আমার জন্য কাজ করে। এখানে মূল পোস্ট থেকে লিঙ্ক : লিঙ্ক


1
কার্যকরভাবে হত্যা প্রক্রিয়াটি করতে আপনাকে -9 যেমন কিল -9 75782 ব্যবহার করতে হবে; যেমন কখনও কখনও কয়েকটি প্রক্রিয়া কেবল হত্যা দিয়ে মারা হয় না
veer7

73

আপনি যদি 8080 বন্দর নম্বরে চলমান কোনও প্রক্রিয়াটি হত্যা করতে চান তবে প্রথমে আপনাকে 8080 বন্দর প্রক্রিয়া সনাক্তকরণ নম্বর (পিআইডি) খুঁজে বের করতে হবে এবং তারপরে এটি হত্যা করতে হবে। 8080 পোর্ট নম্বর পিআইডি খুঁজতে নিম্নলিখিত কমান্ডটি চালান:

sudo lsof -t -i:8080

এখানে,

  • sudo - অ্যাডমিনের সুবিধার্থে জিজ্ঞাসা করার নির্দেশ (ব্যবহারকারী আইডি এবং পাসওয়ার্ড)।
  • lsof - ফাইলগুলির তালিকা (সম্পর্কিত প্রক্রিয়াগুলি তালিকাভুক্ত করার জন্যও ব্যবহৃত হয়)
  • -t - কেবল প্রক্রিয়া আইডি দেখান
  • -i - কেবলমাত্র ইন্টারনেট সংযোগ সম্পর্কিত প্রক্রিয়া দেখান
  • : 8080 - এই পোর্ট সংখ্যাতে কেবল প্রক্রিয়াগুলি দেখান

সুতরাং আপনি এখন নিম্নলিখিত কমান্ডটি ব্যবহার করে সহজেই আপনার পিআইডি মারতে পারেন:

sudo kill -9 <PID>

এখানে,

  • কিল - কমান্ড প্রসেসটি মেরে ফেলুন
  • -9 - জোর করে

নিম্নলিখিত কমান্ডটি ব্যবহার করে আপনি একটি নির্দিষ্ট বন্দরে একটি প্রক্রিয়াটি মেরে ফেলতে একটি কমান্ড ব্যবহার করতে পারেন:

sudo kill -9 $(sudo lsof -t -i:8080)

আরও জানতে আপনি নীচের লিঙ্কটি দেখতে পারেন কীভাবে লিনাক্সের একটি নির্দিষ্ট পোর্টে একটি প্রক্রিয়াটি হত্যা করতে হয়


ধন্যবাদ বন্ধু. sudo kill -9 $(sudo lsof -t -i:8080)আমার জন্য কাজ করেছেন
জুনায়েদ

68

নির্দিষ্ট পোর্টে সমস্ত প্রক্রিয়া মেরে ফেলার সেরা উপায়;

kill -9 $(sudo lsof -t -i:8080)

1
কাজ করছে! ধন্যবাদ।
ফ্রেড

এটি কাজ করেছে !, আপনাকে ধন্যবাদ
জয়লার

একটি সাব-শেল ব্যবহার করে বিস্ময়করভাবে সহজ সমাধান। ধন্যবাদ!
জেসন আর স্টিভেনস সিএফএ

পাসওয়ার্ডের জন্য অনুরোধ
জানায়

41

এটি চলমান সমস্ত কিছুর প্রক্রিয়া আইডিকে অবিরাম করতে প্রিন্টগুলি <port_number>:

fuser -n tcp <port_number> 

এটি স্টাডারকে কিছু স্টাফ মুদ্রণ করে, তাই:

fuser -n tcp <port_number> 2> /dev/null

এরপরে আমরা killকমান্ডে এই প্রক্রিয়াগুলি সরবরাহ করতে পারি :

sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

আপনি যদি এটি অনেক কিছু করেন তবে আপনি এটি কোনও ফাংশনে রাখতে পারেন:

function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}

35

টাস্কটির পিআইডি পান এবং এটি হত্যা করুন।

lsof -ti:8080 | xargs kill

উত্তরের জন্য ধন্যবাদ. ম্যাক ওএসে খুব সহজেই কাজ করে। তুমিই শ্রেষ্ঠ. জাস্ট আপ ভোট
AMIC MIN

1
পোর্ট রেঞ্জগুলির সাথে খুব ভাল কাজ করে lsof -ti:8080-8089 | xargs kill
dvlsg

34

নির্দিষ্ট বন্দরে চলমান পরিষেবার পিড জানতে:

netstat -tulnap | grep :*port_num*

আপনি এই প্রক্রিয়াটির বিবরণ পাবেন। এখন কিল বা কিল -9 পিড ব্যবহার করুন। সহজেই হত্যা করা হয়।

যেমন

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/java 

এখন:

kill -9 1880

হিসাবে সমস্ত কমান্ড চালাতে ভুলবেন না root


25

এক রৈখিক

kill -9 $(lsof -t -i tcp:8080)

এখানে ব্যাখ্যা: একটি সংমিশ্রণ ব্যবহার করুন lsof and kill

root@localhost:~# lsof -i tcp:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    23672 sine  238u  IPv6 3028222      0t0  TCP localhost:http-alt (LISTEN)

পিড এবং ব্যবহার নির্বাচন করুন kill

kill 23672


16

পোর্ট নম্বরটি চয়ন করুন এবং নীচে দেখানো হিসাবে নেটস্প্যাট কমান্ডে গ্রেপ প্রয়োগ করুন

netstat -ap | grep :7070

কনসোল আউটপুট

tcp 0 0 ::: 7070 ::: * তালিকাভুক্ত 3332 / জাভা

পিআইডি (প্রক্রিয়া শনাক্তকরণ নম্বর) এর ভিত্তিতে পরিষেবাটি হত্যা করুন

kill -9 3332

13
  1. lsof -i tcp:8000 এই কমান্ডটি 8000 বন্দরে চলমান প্রক্রিয়া সম্পর্কিত তথ্য তালিকাভুক্ত করে

  2. kill -9 [PID] এই কমান্ডটি প্রক্রিয়াটিকে হত্যা করে


আমি কেবল লক্ষ্য করেছি যে কয়েক সপ্তাহ আগে আমি দুর্ঘটনাক্রমে এটিকে কমিয়ে দিয়েছি, আপনি যদি নিজের অ্যাওয়ার্ডটি সামান্য সম্পাদন করেন তবে আমার এটি সরিয়ে ফেলতে সক্ষম হওয়া উচিত
রবিন-হুডি

12

লিনাক্স : বন্দরটি জানলে প্রথমে আপনি এই আদেশটির পিআইডি খুঁজে পাবেন:

netstat -tulpn 

উদাহরণ: -

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 

তারপরে আপনি হত্যার প্রক্রিয়াটি গ্রহণ করুন। নিম্নলিখিত কমান্ড চালান:

হত্যা -9 পিআইডি

উদাহরণ: -

হত্যা -9 15986


10

লিনাক্স : বন্দরটি জানলে আপনি এই আদেশটি ব্যবহার করতে পারেন:

netstat -plten | grep LISTEN | grep 8080

এআইএক্স :

netstat -Aan | grep LISTEN | grep 8080

তারপরে আপনি প্রথম কলামটি ধরুন (উদাহরণ: f100050000b05bb8) এবং নিম্নলিখিত কমান্ডটি চালান:

rmsock f100050000b05bb8 tcpcb

Kill প্রসেস.


10

সিস্টেমের মধ্যে চলমান সমস্ত পোর্টের বিশদ (পিড, ঠিকানা ইত্যাদি) এর তালিকা জানতে পারবেন :

netstat -tulpn

নিম্নলিখিত কমান্ডে পোর্ট নম্বর সরবরাহ করে আপনি একটি নির্দিষ্ট বন্দর নম্বর বিশদ জানতে পারবেন :

sudo netstat -lutnp | grep -w '{port_number}'

উদাঃ সুডো নেটট্যাট -লুটনপ | grep -w '8080' বিশদগুলি এইভাবে সরবরাহ করা হবে:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

আপনি যদি পিড ব্যবহার করে কোনও প্রক্রিয়া মারতে চান তবে :kill -9 {PID}

আপনি যদি পোর্ট নম্বর ব্যবহার করে কোনও প্রক্রিয়া মারতে চান :fuser -n tcp {port_number}

sudoআপনি কোনও অ্যাক্সেস করতে সক্ষম না হলে ব্যবহার করুন ।


6

kill -9 `fuser 8080/tcp|xargs -n 1`, এই আদেশগুলি টিসিপি সংযোগের সাথে 8080 পোর্টে শোনার প্রক্রিয়াটিকেও হত্যা করে


4
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp

ফলাফল: 80 / টিসিপি: 1858 1867 1868 1869 1871

একের পর এক প্রক্রিয়া মেরে ফেলুন

মেরুন -9 1858


2

আমার ক্ষেত্রে সেন্ট ওসের প্রস্তাবিত উত্তরের কিছু সমস্যা আছে। সুতরাং আমি নিম্নলিখিত সমাধান ব্যবহার করেছি:

  ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill

2

আমি এমন একটি ইয়োক্টো লিনাক্স সিস্টেমে কাজ করছি যা উপলব্ধ লিনাক্স সরঞ্জামগুলির একটি সীমিত সেট রয়েছে। আমি যে প্রক্রিয়াটি একটি নির্দিষ্ট বন্দর ব্যবহার করেছিলাম তা হত্যা করতে চেয়েছিলাম (1883)।

প্রথমে আমরা কোন বন্দরগুলি শুনছি তা দেখার জন্য আমি নিম্নলিখিত কমান্ডটি ব্যবহার করেছি:

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      

এরপরে, আমি নিম্নলিখিত পদ্ধতিতে 1883 পোর্টটি ব্যবহার করে প্রক্রিয়াটির নামটি পেয়েছি:

root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

আমরা উপরে দেখতে পাচ্ছি, এটি এমন প্রোগ্রাম /usr/sbin/mosquittoযা 1883 বন্দর ব্যবহার করে।

শেষ পর্যন্ত, আমি প্রক্রিয়াটি হত্যা করেছি:

root@root:~# systemctl stop mosquitto

আমি systemctlএক্ষেত্রে বেকুয়েজ ব্যবহার করেছি এটি একটি সিস্টেমড সার্ভিস ছিল।


1

@ ভের 7 যা বলেছিল তা বানাতে :

আপনি যদি বন্দরে কী ছিল তা জানতে চান, এটি মারার আগে এটি করুন।

$ sudo netstat -plten |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/java      
tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/java      
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java      
$ ps 25296
  PID TTY      STAT   TIME COMMAND
25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

'পিএস' এবং নেটস্ট্যাট ফিরে রিপোর্ট করার প্রক্রিয়াটির নম্বরটি ব্যবহার করুন



0
  1. প্রথমে প্রক্রিয়াটি পরীক্ষা করুন netstat -lt
  2. প্রক্রিয়া আইডি চেক fuser <port number>/tcp
  3. বন্দরে চলমান প্রক্রিয়াটি মেরে ফেলুন kill <process id>

-3

উইন্ডোজে, এটি হবে netstat -ano | grep "8080"এবং আমরা নিম্নলিখিত বার্তাটি পাইTCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076

আমরা পিআইডি ব্যবহার করে হত্যা করতে পারি taskkill /F /PID 10076


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