2012-03-24 14 views
64

पर प्रक्रिया पिड को निर्धारित करने के लिए शीर्षक के अनुसार, मैं एकाधिक गेम सर्वर चला रहा हूं, और उनमें से प्रत्येक के पास name है लेकिन PID और port संख्या है। मैं सर्वर के PID से मेल खाता हूं जो कुछ बंदरगाह पर सुन रहा है, और फिर मैं इस प्रक्रिया को मारना चाहता हूं। मुझे अपनी बैश स्क्रिप्ट को पूरा करने के लिए इसकी आवश्यकता है।एक निश्चित पोर्ट

क्या यह भी संभव है? क्योंकि इसे वेब पर अभी तक कोई समाधान नहीं मिला है।

उत्तर

90

netstat की -p झंडा प्रक्रिया के आप पीआईडी ​​देता है:

netstat -l -p 

संपादित करें: आदेश है कि FreeBSD में सॉकेट प्रयोक्ताओं की PIDs पाने के लिए की जरूरत है sockstat है। के रूप में हम @Cyclone, लाइन है कि काम करता है के साथ चर्चा के दौरान बाहर काम किया है:

sockstat -4 -l | grep :80 | awk '{print $3}' | head -1 
+2

'नेटस्टैट: 80: अज्ञात या अनियंत्रित प्रोटोकॉल' ने purpoes परीक्षण के लिए '80' (nginx) पोर्ट का उपयोग किया। काम नहीं किया। – Cyclone

+0

आपको यह त्रुटि कैसे मिली? क्या सटीक आदेश ने इसे बनाया? – stanwise

+0

'netstat -l -p 80', जब मैं' netstat -l -p 'करता हूं तो मुझे मैन्युअल मिल रहा है: http://pastebin.com/raw.php?i=q9jeQSBj – Cyclone

7

netstat -nlp आपको कौन सी बंदरगाह पर सुन रहा है के पीआईडी ​​को बताना चाहिए।

+1

'netstat टीसीपी: 80: अज्ञात या uninstrumented protocol' purpoes परीक्षण के लिए '80' (nginx) बंदरगाह का इस्तेमाल किया। काम नहीं किया। – Cyclone

106

लघु संस्करण है जो आप आदेश को मारने के लिए पारित कर सकते हैं:

lsof -i:80 -t 
+4

की तलाश में हैं, इसमें उस पोर्ट पर _connected_ भी शामिल हैं। 'lsof -i4TCP: 80 -sTCP: LISTEN -t' शायद आप चाहते हैं कि आप क्या चाहते हैं। – Nevir

+0

बिल्कुल वही जो मैं खोज रहा था। मैं उस बंदरगाह की खोज करके एक प्रक्रिया को मारना चाहता था जिस पर यह चल रहा है। – mythicalcoder

+0

@Nvir आप क्या मतलब है "उस बंदरगाह पर जुड़े प्रक्रिया भी शामिल है"? क्या आप समझा सकते हैं? – kishorer747

8

netstat -p -l | grep $PORT और lsof -i :$PORT समाधान अच्छे हैं लेकिन मैं (जो coreutils के लिए काम करते हैं) POSIX को fuser $PORT/tcp विस्तार वाक्य रचना पसंद करते हैं पाइप के साथ के रूप में:

pid=`fuser $PORT/tcp` 

यह शुद्ध पिड प्रिंट करता है ताकि आप sed जादू आउट को छोड़ सकें।

$ fuser -k $port/tcp  # with SIGKILL 
$ fuser -k -15 $port/tcp # with SIGTERM 
$ fuser -k -TERM $port/tcp # with SIGTERM 

इसके अलावा -k FreeBSD द्वारा समर्थित है:: http://www.freebsd.org/cgi/man.cgi?query=fuser

1

एक बात fuser मेरे प्रेमी उपकरण है कि बनाता है कि इस प्रक्रिया को सीधे संकेत भेजने की क्षमता है (इस वाक्य रचना भी POSIX के लिए विस्तार है)

के बाद से sockstat देशी रूप मेरी मशीन पर स्थापित नहीं किया गया था मैं netstat बजाय का उपयोग करने के stanwise के जवाब ..

netstat -nlp | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:2000" | awk '{print $7}' | sed -e "s/\/.*//g"" 
1

मैं चाहता हूँ हैक की गई एड प्रोग्रामेटिक रूप से - केवल बैश का उपयोग करके - किसी दिए गए बंदरगाह पर सुनने की प्रक्रिया को मार दें।

मान लीजिए कि पोर्ट 8089 है चलो, तो यहाँ है कैसे मैंने किया:

badPid=$(netstat --listening --program --numeric --tcp | grep "::8089" | awk '{print $7}' | awk -F/ '{print $1}' | head -1) 
kill -9 $badPid 

मुझे आशा है कि यह किसी और मदद करता है! मुझे पता है कि यह मेरी टीम की मदद करने जा रहा है।

+0

यहां वह फ़ंक्शन है जिसका उपयोग मैं इसे करने के लिए करता हूं: 'फ़ंक्शन मार-श्रोता { lsof -i: $ 1 -t | xargs kill -9 } ' पोर्ट 8089 के अपने उदाहरण का उपयोग करना: 'kill-listener 8089' –

0
खिड़कियों पर

, पीआईडी ​​के पाने के लिए netstat विकल्प -ओ है और -p एक प्रोटोकॉल फिल्टर का चयन करता है, पूर्व .: netstat -एक -p -ओ

संबंधित मुद्दे