linux - लिनक्स में विशेष बंदरगाह पर चल रही प्रक्रिया को कैसे मारें?




unix port (10)

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

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


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

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


@ ने क्या कहा:

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

$ 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

'पीएस' और नेटस्टैट की रिपोर्ट की गई प्रक्रिया की संख्या का उपयोग करें


आप lsof कमांड का उपयोग कर सकते हैं। यहां पोर्ट पोर्ट नंबर 80 9 0 है

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

यह मेरे लिए काम किया। यहां मूल पोस्ट का link : link


इस तरह की कोशिश करो,

 sudo fuser -n tcp -k 8080

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

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


यह fuser 8080/tcp आपको उस बंदरगाह पर बाध्य प्रक्रिया की पीआईडी ​​प्रिंट करेगा।

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

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


<port_number> पर चल रहे सभी चीज़ों की प्रक्रिया आईडी को stdout करने के लिए यह प्रिंट करता है:

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)
}

kill -9 `fuser 8080/tcp|xargs -n 1` , यह आदेश भी उस प्रक्रिया को मारता है जो टीसीपी कनेक्शन के साथ पोर्ट 8080 पर सुनता है


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

netstat -tulpn 

उदाहरण:-

 Local Address  Foreign Address  State    PID/Program name

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

फिर आप हत्या की प्रक्रिया लेते हैं। निम्न आदेश चलाएं:

मार -9 पीआईडी

उदाहरण: -

मार -9 15 9 86


विशेष बंदरगाह पर चल रही सेवा के ढक्कन को जानने के लिए:

netstat -tulnap | grep :*port_num*

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

जैसे

netstat -ap | grep :8080

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

अभी व:

kill -9 1880

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





kill-process