लिनक्स में विशेष पोर्ट पर चलने वाली प्रक्रिया को कैसे मारें?


758

मैंने ./shutdown.shटोमैट /binडायरेक्टरी से टॉमकट को बंद करने की कोशिश की । लेकिन पाया गया कि सर्वर ठीक से बंद नहीं हुआ था। और इस प्रकार मैं पुनः आरंभ नहीं कर पा रहा था
मेरा टॉमकट बंदरगाह पर चल रहा है 8080

मैं टॉमकट प्रक्रिया को मारना चाहता हूं 8080। मैं सबसे पहले एक विशिष्ट पोर्ट (8080) पर चलने वाली प्रक्रियाओं की सूची का चयन करना चाहता हूं ताकि किस प्रक्रिया को मार दिया जाए।


जवाबों:


933

यह fuser 8080/tcpआपको उस पोर्ट पर बाध्य प्रक्रिया का PID प्रिंट करेगा।

और यह fuser -k 8080/tcpउस प्रक्रिया को मार देगा।

लिनक्स पर ही काम करता है। अधिक सार्वभौमिक lsof -i4(या IPv6 के लिए 6) का उपयोग होता है।


2
क्या यह 8080 के साथ एक संभव जुड़ा सॉकेट बंद करता है?
फेर y

9
यह पोर्ट को ठीक से बंद नहीं करता है। मूल प्रक्रिया के मारे जाने के बाद पोर्ट को TIME_WAIT स्थिति में रखा जाता है। ओएस लगभग 60 सेकंड के बाद अंततः बंदरगाह को पूरी तरह से बंद कर देगा। इसका मतलब है कि आप कम से कम 60 सेकंड के लिए पोर्ट का पुन: उपयोग नहीं कर सकते (जब तक कि आप सॉकेट में पुन: उपयोग का विकल्प न दें)।
निशान लता

2
डार्विन पर, के एक अलग संस्करण का उपयोग किया जाना चाहिए fuser। केवल एक फ़ाइल लेता है, समर्थन नहीं करता है -k
एपी

3
'फ्यूज़र -क-एन tcp 8080' इस प्रक्रिया को भी मार डालेगा
हेशम यासन

7
@ डब्लिस फ्यूज़र psmisc का हिस्सा है। यदि आपको मिलता है fuser: command not found, तो psmisc स्थापित करें। सेंटोस / आरएचईएल 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, तो TERM सिग्नल उर्फ -15या soft killभेजा जाता है, जो कभी-कभी मारने के लिए पर्याप्त नहीं है। एक प्रक्रिया।)।


9
मार: उपयोग: मार [-s sigspec | -एन सिग्नम | -sigspec] pid | jobspec ... या किल -l [sigspec] यह वही है जो मुझे मिल रहा है जब मैं आपकी आज्ञाओं को पूरा करता हूं
सुधीर बेलागली

2
@SudhirBelagali ने इसे सुपर यूजर के साथ कियाsudo
Marcel Djaman

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
@JonasWielicki आप अपने w / आउट रूट विशेषाधिकारों को देख सकते हैं।
dbliss

मुझे नेटस्टैट के लिए रूट विशेषाधिकारों की आवश्यकता थी। क्या वास्तव में यह जानने का कोई तरीका है कि प्रक्रिया क्या है? जहां तक ​​मैं बता सकता हूं कि मैंने सभी एप्लिकेशन बंद कर दिए थे, लेकिन यह एक टर्मिनल विंडो से हो सकता है, जहां मैंने अनजाने में पृष्ठभूमि कार्य के लिए प्रक्रियाओं को धक्का दिया। शायद मुझे सभी प्रक्रियाओं को देखने के लिए टर्मिनल कमांड 'पीएस' को
चलाना चाहिए था

150

मैं केवल विशिष्ट बंदरगाह पर लिस्टेन को मारने के लिए इस एक-लाइनर को जोड़ूंगा:

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 पोर्ट प्रोसेस आइडेंटिफिकेशन नंबर (PID) को ढूंढना होगा और फिर उसे मारना होगा। 8080 पोर्ट नंबर PID खोजने के लिए निम्न कमांड चलाएँ:

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)मेरे लिए काम किया
जुनैद

69

एक विशिष्ट बंदरगाह पर सभी प्रक्रियाओं को मारने का सबसे अच्छा तरीका;

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

1
काम किया! धन्यवाद।
फ्रेड

यह काम किया है, धन्यवाद!
Jaylers

एक उपधारा का उपयोग कर आश्चर्यजनक सरल समाधान। धन्यवाद!
जेसन आर स्टीवंस सीएफए

पासवर्ड के लिए सूदो संकेत नहीं देता
कुलदीप यादव

41

यह सब कुछ चल रहा है की प्रक्रिया आईडी को रोकने के लिए प्रिंट करता है <port_number>:

fuser -n tcp <port_number> 

यह भी कुछ सामान stderr को प्रिंट करता है, इसलिए:

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 MING

1
पोर्ट रेंज के साथ अच्छी तरह से काम करता है, भी, जैसे lsof -ti:8080-8089 | xargs kill
23

34

विशेष पोर्ट पर चलने वाली सेवा की जानकारी जानने के लिए:

netstat -tulnap | grep :*port_num*

आपको उस प्रक्रिया का विवरण मिलेगा। अब मारने या मारने का उपयोग करें -9 pid। आसानी से मार डाला।

जैसे

netstat -ap | grep :8080

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

अभी:

kill -9 1880

के रूप में सभी आदेशों को चलाने के लिए याद रखें root


26

एक लाइन

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)

pid और उपयोग का चयन करें kill

kill 23672


16

पोर्ट नंबर चुनें और नीचे दिखाए अनुसार netstat कमांड में grep लागू करें

netstat -ap | grep :7070

कंसोल आउटपुट

tcp 0 0 ::: 7070 ::: * LISTEN 3332 / जावा

मार सेवा के आधार पर पीआईडी (प्रक्रिया पहचान संख्या)

kill -9 3332

13
  1. lsof -i tcp:8000 यह कमांड पोर्ट 8000 में चल रही प्रक्रिया की जानकारी को सूचीबद्ध करता है

  2. kill -9 [PID] यह आदेश प्रक्रिया को मारता है


मैंने अभी देखा कि मैंने कुछ हफ़्ते पहले ही यह हादसा कर दिया था, अगर आप अपने एवर को थोड़ा एडिट करते हैं तो मुझे इसे हटाने में सक्षम होना चाहिए
रॉबिन-हूडि

12

लिनक्स : यदि आप पोर्ट जानते हैं तो सबसे पहले आप इस कमांड के PID पा सकते हैं:

netstat -tulpn 

उदाहरण:-

 Local Address  Foreign Address  State    PID/Program name

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

तुम तो मार प्रक्रिया ले लो। निम्न आदेश चलाएँ:

किल -9 पीआईडी

प्रदर्शनी: -

मार-९ १५ -६


10

लिनक्स : यदि आप पोर्ट जानते हैं तो आप इस कमांड का उपयोग कर सकते हैं:

netstat -plten | grep LISTEN | grep 8080

AIX :

netstat -Aan | grep LISTEN | grep 8080

फिर आप पहला कॉलम लेते हैं (उदाहरण: f100050000b05bb8) और निम्न कमांड चलाएँ:

rmsock f100050000b05bb8 tcpcb

प्रक्रियाओं को मार दो।


10

आप सिस्टम में चलने वाले सभी बंदरगाहों की सूची इसके विवरण (पिड, एड्रेस आदि) के साथ जान सकते हैं :

netstat -tulpn

आप निम्नलिखित आदेश में पोर्ट नंबर प्रदान करके किसी विशेष पोर्ट संख्या का विवरण जान सकते हैं :

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

ex: sudo netstat -lutnp | grep -w '8080' विवरण इस तरह प्रदान किया जाएगा:

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

यदि आप pid का उपयोग करके किसी प्रक्रिया को मारना चाहते हैं तो :kill -9 {PID}

यदि आप पोर्ट नंबर का उपयोग करके किसी प्रक्रिया को मारना चाहते हैं :fuser -n tcp {port_number}

sudoयदि आप किसी का उपयोग करने में सक्षम नहीं हैं तो उपयोग करें ।


6

kill -9 `fuser 8080/tcp|xargs -n 1`, यह कमांड उस प्रक्रिया को भी मारता है जो TCP कनेक्शन के साथ पोर्ट 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

मैं एक Yocto लिनक्स सिस्टम पर काम कर रहा हूं जिसमें उपलब्ध लिनक्स उपकरणों का एक सीमित सेट है। मैं उस प्रक्रिया को मारना चाहता था जो एक विशेष बंदरगाह (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इस मामले में क्योंकि यह एक systemd सेवा थी becuase का उपयोग किया ।


1

@ veer7 ने क्या कहा:

यदि आप जानना चाहते हैं कि पोर्ट पर क्या था, तो इसे मारने से पहले करें।

$ 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

'Ps' और उस प्रक्रिया की संख्या का उपयोग करें जो netstat ने वापस रिपोर्ट की है



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

हम PID का उपयोग करके मार सकते हैं taskkill /F /PID 10076


यह सवाल स्पष्ट रूप से लिनक्स मदद के लिए पूछ रहा है; विंडोज नहीं।
बेबीसाइकल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.