จะทราบได้อย่างไรว่า PID ใดบ้างที่รับฟัง


13

ฉันมี PID ของกระบวนการบางอย่างที่ฟังพอร์ตบางตัวใน OS X ของฉันและฉันจำเป็นต้องรู้ว่าพอร์ตใดที่ฟังโดยกระบวนการนี้ ฉันจะทำมันได้อย่างไร

ฉันรู้ว่าฉันสามารถใช้lsofเพื่อทราบว่ากระบวนการใดบ้างที่รับฟังพอร์ต แต่ฉันจำเป็นต้องทำการดำเนินการแบบผกผัน

ขอขอบคุณ.

UPD

OS X ใช้ utils BSD ดังนั้นฉันมี BSD ไม่ลินุกซ์netstat netstatLinux netstatมี-pตัวเลือกในการแสดง PID, BSD netstatใช้-pเพื่อระบุพอร์ตและไม่มีตัวเลือกในการแสดง PID


คุณหมายถึงว่าคุณกำลังพยายามค้นหาพอร์ตที่กระบวนการกำลังรับฟังอยู่หรือไม่? netstatสามารถทำสิ่งนี้เพื่อคุณ คุณสามารถgrepใช้ PID ได้หากคุณต้องการกรองผลลัพธ์ของnetstat
Centimane

นอกจากนี้ยังมีlsofการใช้งานที่ไม่ได้เป็นเพียงวิธีหนึ่ง lsof|grep ${PID}คุณสามารถทำสิ่งที่ชอบ ซึ่งจะทิ้งทุกสิ่งอย่างโหดร้ายและgrepจะเลือกเส้นที่มี PID ในนั้น ในโอกาสที่ไม่เหมาะสมอาจมีรายการที่ไม่เกี่ยวข้องเนื่องจากหมายเลข PID ที่ตรงกับค่าอื่น ๆ แต่มีโอกาสที่จะไม่เป็นใคร
MelBurslan

@ เดฟใช่คุณทำตามฉันถูกต้อง อย่างที่ฉันเห็นเวอร์ชัน BSD netstatไม่สามารถแสดง PID ได้
shau-kote

@MelBurslan มันดูไม่เป็นระเบียบเรียบร้อย ยิ่งกว่านั้นมันไม่เร็ว - ใช้เวลาพอสมควรกับ MBP ของฉัน
shau-kote

คำตอบ:


13

ฉันได้พบวิธีแก้ปัญหาด้วยตัวเองโดยการอ่านลึกman lsofๆ (ใช่ RT * M ยังคงช่วยได้) ขอบคุณ @Gilles สำหรับการเล็ง

นี่คือวิธีแก้ปัญหา: lsof -aPi -p 555 (555 คือ PID)

คำอธิบาย:

  1. -p เพื่อระบุหมายเลข PID;
  2. -i เพื่อแสดงเฉพาะอุปกรณ์เครือข่าย
  3. -a ถึงและสองเงื่อนไขข้างต้น (มิฉะนั้นจะถูก ORed);
  4. -P เพื่อแสดงหมายเลขพอร์ต (แทนชื่อพอร์ตโดยค่าเริ่มต้น)

นอกจากนี้หนึ่งสามารถใช้lsof -aPi4 -p 555หรือlsof -aPi6 -p 55สำหรับ IPv4 หรือ IP6 ที่อยู่เท่านั้นตาม

หากผลลัพธ์จะถูกแยกวิเคราะห์โดย-Fnตัวเลือกโปรแกรมอื่นอาจเป็นประโยชน์ ด้วยตัวเลือกนี้lsofจะสร้าง "เอาต์พุตสำหรับโปรแกรมอื่น" แทนเอาต์พุตที่จัดรูปแบบที่ดี lsof -aPi4 -Fn -p 555จะเอาท์พุทแบบนี้:

p554
nlocalhost:4321

PS ทั้งหมดที่ฉันได้ทดสอบใน OS X El Capitan ของฉัน แต่ฉันเห็นว่ามันควรจะทำงานบน Linux ด้วย


6

lsofให้ข้อมูลเกี่ยวกับไฟล์ที่เปิดโดยกระบวนการรวมถึงพอร์ตเครือข่าย มันมีอยู่ในสวยมากทุกระบบยูนิกซ์รวมทั้ง OSX

Rosetta Stone สำหรับ Unixไม่ได้แสดงรายการเครื่องมืออื่น ๆ สำหรับ“กระบวนการตรงกับไฟล์หรือพอร์ต” ใน OSX

ในการแสดงรายการกระบวนการที่รับฟังพอร์ต TCP คุณสามารถใช้

lsof -iTCP -sTCP:LISTEN

lsof -iUDPแสดงรายการกระบวนการที่เปิดซ็อกเก็ต UDP lsof -iแสดงรายการซ็อกเก็ตเครือข่ายเปิดทั้งหมด (ไคลเอ็นต์ TCP, เซิร์ฟเวอร์ TCP และโปรโตคอล IP อื่น ๆ )


0

หากคุณต้องการทราบว่าพอร์ตใดที่กำลังฟังคุณสามารถใช้ netstat -p option.you ต้องเป็น superuser:

$ sudo netstat -nlp | grep 80
tcp  0  0  0.0.0.0:80  0.0.0.0:*  LISTEN  125004/nginx

ถ้าคุณต้องการทราบเพิ่มเติมเกี่ยวกับมันลองลิงค์นี้


มันเป็นเรื่องของ GNU netstatฉันมี OS X และจึงใช้ netstatBSD ใช้-pเพื่อระบุพอร์ต TCP / IP และไม่มีตัวเลือกในการแสดง PID
shau-kote

0

บน FreeBSD คุณสามารถใช้sockstatข้อมูลนี้ได้ ฉันไม่แน่ใจว่า OS X มีsockstatหรือไม่เพราะฉันไม่มี Mac

ตัวอย่างเช่นหากต้องการดูการเชื่อมต่อ TCPv4 ทั้งหมด:

sockstat -4


แม้ว่าไม่มีsockstatคำสั่งบน Mac ของฉัน :(
shau-kote

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