मैंने क्लाइंट से कम्यूनिकेट करने के लिए जावा क्लास से पोर्ट # 5955 खोला। मेरे द्वारा किए जाने के बाद मैं इस पोर्ट को कैसे बंद करूं? और यह भी कि पोर्ट खुलने या बंद होने पर कौन सी कमांड मुझे दिखा सकती है?
मैंने क्लाइंट से कम्यूनिकेट करने के लिए जावा क्लास से पोर्ट # 5955 खोला। मेरे द्वारा किए जाने के बाद मैं इस पोर्ट को कैसे बंद करूं? और यह भी कि पोर्ट खुलने या बंद होने पर कौन सी कमांड मुझे दिखा सकती है?
जवाबों:
उस पोर्ट नंबर (जैसे, 5955) पर कब्जा करने वाली प्रक्रिया आईडी (पीआईडी) का पता लगाएं, जिसे आप मुक्त करना चाहते हैं
sudo lsof -i :5955
उस प्रक्रिया को मारें जो वर्तमान में अपने पीआईडी का उपयोग करके पोर्ट का उपयोग कर रही है
sudo kill -9 PID
kill PID
(जिसका अर्थ है -15) का उपयोग करना चाहिए , फिर -2 और -1 का प्रयास करें। -9 अंतिम उपाय केवल तभी है जब हर दूसरे विकल्प काम करने में विफल रहे।
प्रक्रिया खोजने के लिए प्रयास करें:
sudo lsof -i :portNumber
उस प्रक्रिया को मारें जो वर्तमान में अपने पीआईडी का उपयोग करके पोर्ट का उपयोग कर रही है
kill PID
और फिर यह देखने के लिए जांचें कि क्या पोर्ट बंद हो गया है। यदि नहीं, तो प्रयास करें:
kill -9 PID
यदि पिछले काम नहीं किया तो मैं केवल निम्नलिखित कार्य करूंगा
sudo kill -9 PID
सुरक्षित रहने के लिए। फिर से आपने पोर्ट को कैसे खोला, इसके आधार पर, इससे कोई फर्क नहीं पड़ता।
हालाँकि आपने पोर्ट खोला था, आप उसे उसी तरह से बंद करते हैं। उदाहरण के लिए, यदि आपने एक सॉकेट बनाया है, तो इसे 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
कमांड से देख सकते हैं ।
2018 में यहाँ MacOS HighSierra का उपयोग करके मेरे लिए क्या काम किया गया है:
sudo lsof -nPi: yourPortNumber
फिर:
sudo मार -9 yourPIDnumber
lsof -nPi
थोड़ा बेहतर है क्योंकि पोर्ट नंबर वास्तव में आउटपुट में दिखाई देता है और आप जो मार रहे हैं उसका बेहतर अहसास मिलता है।
sudo lsof -nPi | grep LISTEN
आप इस पहली कमांड का उपयोग उस प्रक्रिया को मारने के लिए भी कर सकते हैं जो एक विशेष पोर्ट का मालिक है:
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) भेजने से बचना बेहतर है।
चीयर्स,
लड़का।
मैं lsof
के साथ संयुक्त का उपयोग करेंkill
जैसा कि ऊपर बताया गया है, रूप से ; लेकिन इस प्रक्रिया को स्वचालित करने के लिए एक त्वरित सा बैश स्क्रिप्ट लिखी।
इस स्क्रिप्ट के साथ, आप बस killport 3000
कहीं से भी टाइप कर सकते हैं , और यह पोर्ट पर चलने वाली सभी प्रक्रियाओं को मार देगा 3000
।
lsof
साथ संयोजन kill
में कुछ भी वापस नहीं आया और मेरी स्क्रिप्ट को macOS Sierra पर लटका दिया। लेकिन killport
एक आकर्षण की तरह काम करता है और तेज होता है। धन्यवाद!
मैंने इस उद्देश्य के लिए एक समारोह बनाया है।
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
अपने टर्मिनल में कोड के इस ब्लॉक को कॉपी और पेस्ट करके अपने इच्छित पोर्ट को मुक्त करना चाहिए। बस अंतिम पंक्ति में पोर्ट नंबर बदलने के लिए याद रखें।
नीचे की कोशिश करें, मान लें कि रनिंग पोर्ट है 8000
:
free-port() { kill "$(lsof -t -i :8000)"; }
मुझे यहां संदर्भ मिला
पहले प्रॉसेस आईडी (पीआईडी) का पता लगाएं, जिसने आवश्यक पोर्ट पर कब्जा कर लिया है। (जैसे 5434)
ps aux | ग्रेप 5434
2. उस प्रक्रिया को पूरा करें
kill -9 <pid>