Ich habe eine PID eines bestimmten Prozesses, der einige Ports auf meinem OS X überwacht, und ich muss wissen, welche Ports von diesem Prozess überwacht werden. Wie kann ich es tun?
Ich weiß, dass ich verwenden kann, um lsof
zu wissen, welcher Prozess einen Port überwacht, aber ich muss eine inverse Operation ausführen.
Vielen Dank.
UPD
OS X verwendet BSD-Utils, daher habe ich BSD netstat
nicht Linux netstat
. Linux netstat
hat die -p
Option, PIDs anzuzeigen, BSD verwendet , um den Port anzugeben, und hat keine Option, PIDs anzuzeigen .netstat
-p
networking
osx
bsd
Shau-Kote
quelle
quelle
netstat
kann das für dich tun. Sie könnengrep
auf der PID, wenn Sie die Ausgabe von filtern möchtennetstat
lsof
nutzung ist nicht nur eine möglichkeit. Sie können so etwas tunlsof|grep ${PID}
. das wird alles grob entleeren undgrep
die Zeilen mit PID in ihnen auswählen. Bei einer Unmöglichkeit wird möglicherweise eine irrelevante Zeilenetstat
PIDs nicht anzeigen.Antworten:
Ich habe selbst eine Lösung gefunden, indem ich tief durchgelesen habe
man lsof
. (Ja, RT * M hilft immer noch.) Vielen Dank an @Gilles für das Zielen.Hier ist die Lösung:
lsof -aPi -p 555
(555 ist die PID).Erläuterung:
-p
um die PID-Nummer anzugeben;-i
um nur Netzwerkgeräte anzuzeigen;-a
zu UND zwei Bedingungen oben (sonst werden sie ODER-verknüpft);-P
um Portnummern anzuzeigen (stattdessen standardmäßig Portnamen).Zusätzlich kann man
lsof -aPi4 -p 555
oder verwendenlsof -aPi6 -p 55
für IPv4 oder IP6 nur Adressen entsprechend verwenden.Wenn die Ausgabe von einem anderen Programm analysiert wird,
-Fn
kann dies hilfreich sein. Mit dieser Optionlsof
wird "Ausgabe für anderes Programm" anstelle einer schön formatierten Ausgabe erzeugt.lsof -aPi4 -Fn -p 555
wird so etwas ausgeben:PS Ich habe alles auf meinem OS X El Capitan getestet, aber wie ich sehen kann, sollte es auch unter Linux funktionieren.
quelle
lsof
Stellt Informationen zu Dateien bereit, die von Prozessen geöffnet wurden, einschließlich Netzwerkports. Es ist auf so ziemlich allen Unix-Systemen verfügbar, einschließlich OSX .Der Rosetta Stone für Unix listet unter OSX kein anderes Tool zum „Abgleichen von Prozessen mit Dateien oder Ports“ auf.
Mit dieser Option können Sie Prozesse auflisten, die einen TCP-Port überwachen
lsof -iUDP
Listet Prozesse auf, bei denen ein UDP-Socket geöffnet ist.lsof -i
listet alle offenen Netzwerk-Sockets auf (TCP-Clients, TCP-Server und andere IP-Protokolle).quelle
Wenn Sie wissen möchten, welcher Port empfangsbereit ist, können Sie die Option -p von netstat verwenden. Sie müssen der Superuser sein:
Wenn Sie mehr darüber wissen möchten, versuchen Sie diesen Link
quelle
netstat
, ich habe OS X und benutze daher BSDnetstat
. Es wird verwendet-p
, um den TCP / IP-Port anzugeben, und es kann keine PID angezeigt werden.Unter FreeBSD können Sie
sockstat
diese Informationen verwenden. Ich bin nicht sicher, ob OS X hatsockstat
, da ich keinen Mac habe.So können Sie beispielsweise alle TCPv4-Verbindungen anzeigen:
sockstat -4
quelle
sockstat
auf meinem Mac gibt es keinen Befehl. :(Sie können netstat mit grep, awk und sed verketten, um die Ports mit den entsprechenden Pids unter Linux und Cygwin anzuzeigen:
Mehr Details
quelle