मैं मैक पर टर्मिनल से एक खुला पोर्ट कैसे बंद कर सकता हूं?


198

मैंने क्लाइंट से कम्यूनिकेट करने के लिए जावा क्लास से पोर्ट # 5955 खोला। मेरे द्वारा किए जाने के बाद मैं इस पोर्ट को कैसे बंद करूं? और यह भी कि पोर्ट खुलने या बंद होने पर कौन सी कमांड मुझे दिखा सकती है?


1
आपने उस पोर्ट को कैसे खोला? यह स्पष्ट नहीं है कि आप जावा एप्लिकेशन में पोर्ट खोलने या बंद करने की बात कर रहे हैं या फ़ायरवॉल से।
22 मई को mariosangiorgio

जवाबों:


396
  1. उस पोर्ट नंबर (जैसे, 5955) पर कब्जा करने वाली प्रक्रिया आईडी (पीआईडी) का पता लगाएं, जिसे आप मुक्त करना चाहते हैं

    sudo lsof -i :5955
    
  2. उस प्रक्रिया को मारें जो वर्तमान में अपने पीआईडी ​​का उपयोग करके पोर्ट का उपयोग कर रही है

    sudo kill -9 PID
    

32
किसी प्रक्रिया को मारने का पहला प्रयास -9 नहीं होना चाहिए, और यह बहुत बुरी आदत है। जैसा कि मुझे याद है, आपको पहले सिर्फ kill PID(जिसका अर्थ है -15) का उपयोग करना चाहिए , फिर -2 और -1 का प्रयास करें। -9 अंतिम उपाय केवल तभी है जब हर दूसरे विकल्प काम करने में विफल रहे।
मेव

3
@Meow द्वारा सुझाए गए बिना किसी झंडे को मार दिया और यह मेरे लिए काम किया
टोनी

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

यदि यह बिना किसी आउटपुट के तुरंत लौटता है, तो पोर्ट खुला नहीं है।

यह उल्लेखनीय है कि, तकनीकी रूप से, यह एक बंदरगाह है जो खुला नहीं है, लेकिन एक मेजबान: बंदरगाह संयोजन। उदाहरण के लिए, यदि आपको 10.0.1.2 के रूप में एक लैन में प्लग किया गया है, तो आप 127.0.0.1:5955, या 10.0.1.2:5955 को सॉकेट को बांध सकते हैं, या तो एक दूसरे को प्रभावित किए बिना, या आप 0.0.0.0 को बांध सकते हैं : 5955 दोनों को एक बार संभालने के लिए। आप अपने कंप्यूटर के सभी IPv4 और IPv6 पतों को ifconfigकमांड से देख सकते हैं ।


24

बहुत ही सरल पोर्ट 5900 पाएं:

sudo lsof -i :5900

फिर 59553 को पीआईडी ​​माना

sudo kill 59553

1
यह मौजूदा उत्तरों में कुछ भी नहीं जोड़ता है!
hatef

16

2018 में यहाँ MacOS HighSierra का उपयोग करके मेरे लिए क्या काम किया गया है:

sudo lsof -nPi: yourPortNumber

फिर:

sudo मार -9 yourPIDnumber


1
lsof -nPiथोड़ा बेहतर है क्योंकि पोर्ट नंबर वास्तव में आउटपुट में दिखाई देता है और आप जो मार रहे हैं उसका बेहतर अहसास मिलता है।
रिच स्टोन

1
सभी श्रवण बंदरगाहों की जानकारी देखने के लिए भी उपयोगी है:sudo lsof -nPi | grep LISTEN
leanne

14

एक लाइनर सबसे अच्छा है

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

उदाहरण: मैक पर, पोर्ट 9604 को साफ़ करना चाहता था। निम्नलिखित कमांड ने एक आकर्षण की तरह काम किया

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

6

आप इस पहली कमांड का उपयोग उस प्रक्रिया को मारने के लिए भी कर सकते हैं जो एक विशेष पोर्ट का मालिक है:

sudo netstat -ap | grep :<port_number>

उदाहरण के लिए, मान लें कि यह प्रक्रिया पोर्ट 8000 TCP रखती है , फिर कमांड को चलाना:

sudo netstat -ap | grep :8000

पोर्ट 8000 की प्रक्रिया के अनुरूप लाइन का उत्पादन करेगा , उदाहरण के लिए:

tcp  0  0 *:8000   *:* LISTEN  4683/procHoldingPort

इस मामले में, procHoldingPort उस प्रक्रिया का नाम है जिसने पोर्ट को खोला, 4683 इसका pid है, और 8000 है (ध्यान दें कि वह TCP है) वह पोर्ट नंबर है जो इसे धारण करता है (जिसे आप बंद करना चाहते हैं)।

फिर उपरोक्त उदाहरण के बाद, इस प्रक्रिया को मारें:

kill  4683

जैसा कि दूसरों ने यहां बताया है, अगर वह काम नहीं करता है (आप एक तर्क के रूप में -9 के साथ मारने का उपयोग करने की कोशिश कर सकते हैं):

kill -9 4683

फिर, सामान्य तौर पर, यदि आप कर सकते हैं तो SIGKILL (-9) भेजने से बचना बेहतर है।

चीयर्स,

लड़का।


5

मैं lsofके साथ संयुक्त का उपयोग करेंkillजैसा कि ऊपर बताया गया है, रूप से ; लेकिन इस प्रक्रिया को स्वचालित करने के लिए एक त्वरित सा बैश स्क्रिप्ट लिखी।

इस स्क्रिप्ट के साथ, आप बस killport 3000कहीं से भी टाइप कर सकते हैं , और यह पोर्ट पर चलने वाली सभी प्रक्रियाओं को मार देगा 3000

https://github.com/xtrasimplicity/killport


1
आपने मेरा दिन बचाया। किसी कारण के lsofसाथ संयोजन killमें कुछ भी वापस नहीं आया और मेरी स्क्रिप्ट को macOS Sierra पर लटका दिया। लेकिन killportएक आकर्षण की तरह काम करता है और तेज होता है। धन्यवाद!
6

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. पहले प्रॉसेस आईडी (पीआईडी) का पता लगाएं, जिसने आवश्यक पोर्ट पर कब्जा कर लिया है। (जैसे 5434)

    ps aux | ग्रेप 5434

2. उस प्रक्रिया को पूरा करें

   kill -9 <pid>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.