특정 PID가 어떤 포트를 수신하고 있는지 어떻게 알 수 있나요?

특정 PID가 어떤 포트를 수신하고 있는지 어떻게 알 수 있나요?

OS X의 특정 포트에서 수신 대기 중인 특정 프로세스의 PID가 있고, 프로세스가 수신 중인 포트를 알아야 합니다. 어떻게 해야 합니까?

나는 이것을 사용하여 lsof어느 프로세스가 특정 포트에서 수신 대기하고 있는지 알 수 있다는 것을 알고 있지만 그 반대의 작업도 수행해야 합니다.

감사해요.

UPD

netstatOS X는 BSD 유틸리티를 사용하므로 Linux 대신 BSD를 사용합니다 netstat. Linux에는 PID를 표시하는 옵션이 netstat있습니다 .-pBSD는 특정 포트를 netstat사용하며 -pPID를 표시하는 옵션이 없습니다.

답변1

나는 추가 독서를 통해 스스로 해결책을 찾았습니다 man lsof. (예, RT*M은 여전히 ​​도움이 됩니다.) 조준해 주신 @Gilles에게 감사드립니다.

해결책은 다음과 같습니다. lsof -aPi -p 555(555는 PID입니다.)

설명하다:

  1. -pPID 번호를 지정하십시오.
  2. -i네트워크 장치만 표시합니다.
  3. -a위의 두 조건을 AND로 합니다(그렇지 않으면 OR 연산이 수행됩니다).
  4. -P포트 번호를 표시합니다(기본적으로 포트 이름이 표시됨).

또한 IPv4 또는 IP6 주소를 적절하게 lsof -aPi4 -p 555또는 하나만 사용할 수 있습니다 .lsof -aPi6 -p 55

다른 프로그램에서 출력을 구문 분석하는 경우 -Fn이 옵션이 도움이 될 수 있습니다. 이 옵션을 사용하면 lsof올바른 형식의 출력 대신 "다른 프로그램의 출력"이 생성됩니다. lsof -aPi4 -Fn -p 555다음과 비슷한 내용이 출력됩니다.

p554
nlocalhost:4321

폴리스티렌 나는 이 모든 것을 내 OS X El Capitan에서 테스트했지만, 내가 이해한 바로는 Linux에서도 작동할 것입니다.

답변2

lsof네트워크 포트를 포함하여 프로세스에서 열린 파일에 대한 정보를 제공합니다. 거의 모든 UNIX 시스템에서 작동합니다.운영체제 포함.

이것유닉스용 로제타스톤OSX에는 "파일 또는 포트에 프로세스 일치"를 위한 다른 도구가 나열되어 있지 않습니다.

TCP 포트에서 수신 대기하는 프로세스를 나열하려면 다음을 사용할 수 있습니다.

lsof -iTCP -sTCP:LISTEN

lsof -iUDPUDP 소켓을 여는 프로세스를 나열합니다. lsof -i열려 있는 모든 네트워크 소켓(TCP 클라이언트, TCP 서버 및 기타 IP 프로토콜)을 나열합니다.

답변3

어떤 포트가 수신 대기 중인지 알고 싶다면 netstat의 -p 옵션을 사용할 수 있습니다. 슈퍼유저가 되어야 합니다.

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

더 자세히 알고 싶다면 이것을 시도해보세요협회

답변4

netstat를 grep, awk 및 sed와 연결하여 Linux 및 Cygwin에서 포트와 해당 PID를 표시할 수 있습니다.

$ netstat -ano | grep LISTENING | grep -v ‘\[::\]’ | sort -n | uniq -c | awk ‘ {print $3 “\t” $6}’ | sed ‘s/.*://’

자세한 내용은

관련 정보