ฉันจะค้นหา (และฆ่า) กระบวนการทำงานบนพอร์ตที่แน่นอนได้อย่างไร [ซ้ำ]


30

ซ้ำเป็นไปได้: การ
ค้นหากระบวนการที่ใช้พอร์ตที่แน่นอนใน Linux

ฉันใช้ Ubuntu Linux 11.04 ฉันจะเขียนเชลล์สคริปต์นิพจน์ที่จะค้นหากระบวนการที่ทำงานบนพอร์ต 4444 แล้วฆ่ากระบวนการได้อย่างไร


ฉันไม่คิดว่ามันจะเป็นสิ่งที่ซ้ำกันเพราะถามว่าจะฆ่าอย่างไรไม่พบกระบวนการบนพอร์ต: fuser -k 9000 / tcp
35419 Kris

คำตอบ:


47

คุณสามารถใช้lsofเพื่อค้นหากระบวนการ:

lsof -t -i:4444

จะแสดงเฉพาะ pid ของกระบวนการที่ฟังบนพอร์ต 4444 คุณสามารถพูดได้

kill `lsof -t -i:4444`

ถ้าคุณกล้า


14
+1 สำหรับ 'หากคุณกล้า'
Mr. Shickadance

7

คุณใช้lsof:

# lsof -n | grep TCP | grep LISTEN | grep 4444

ผลลัพธ์จะเป็นดังนี้:

pname 16125 user 28u IPv6 4835296 TCP *:4444 (LISTEN)

โดยที่คอลัมน์แรกคือชื่อกระบวนการและคอลัมน์ที่สองคือรหัสกระบวนการ จากนั้นคุณแยกวิเคราะห์ผลลัพธ์ค้นหาว่า id กระบวนการ (PID) คืออะไรและใช้killคำสั่งเพื่อฆ่ามัน


1
ฉันไม่เคยได้ยินเรื่องนี้มาก่อน เมื่อมองไปที่หน้าคนมันมีประโยชน์อย่างเหลือเชื่อ ขอบคุณ!

ทุกอย่างใน linux เป็นไฟล์และ lsof ให้คุณค้นหาไฟล์ดังนั้น ... ใช่มีประโยชน์มาก
jcollum

2

หรือคุณสามารถใช้netstat -apหากlsofระบบของคุณไม่ว่าง (เพราะมันไม่ได้อยู่ในระบบ busybox ที่ฉันทำงานด้วยเป็นประจำ)


โทรดีฉันสงสัยว่าทำไมนี่ไม่ทำงานกับภาพนักเทียบท่า busybox ที่ได้รับฉันกำลังทำงานอยู่
jcollum

2
kill -9 `netstat -lanp --protocol=inet | grep 4444 | awk -F" " '{print $7}' | awk -F"/" '{print $1}'`

ใช้ netstat เพื่อฟังรายการซ็อกเก็ต INET พร้อมพอร์ตตัวเลขและกระบวนการพาเรนต์ ตัวกรองสำหรับสตริง 4444 นำคอลัมน์คอลัมน์ที่ 7 (pid / process) ออกแล้วแยกเพิ่มเติมด้วย "/" เพื่อรับ pid ส่งผ่านไปยังคำสั่ง kill


2
ฉันอยากจะแนะนำกับการฆ่า -9 ไม่อนุญาตให้ล้างข้อมูลและแอพอินเทอร์เน็ตบางรายการมีแนวโน้มที่จะมีทรัพยากรที่จำเป็นต้องปิดตัวลงอย่างหมดจด
Rich Homolka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.