특정 포트를 사용하여 프로세스의 PID를 찾으십니까?


391

우분투 시스템에 hadoop을 설치하고 있습니다. 시작하면 포트 9000이 사용 중이라고보고합니다.

나는 사용했다 :

netstat -nlp|grep 9000

그러한 포트가 있는지 확인하고 이것을 얻었습니다.

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

그러나 프로세스를 유지하는 프로세스의 PID를 어떻게 얻을 수 있습니까?




netstat명령은 많은 운영 체제에서 작동하므로이를 위해서는 알려진 각 열린 포트를 따라 pid를 표시 할 인수를 찾아야합니다.
Luciano

답변:


474

Linux에서는 원하는 정보를 얻으려면 루트 또는 프로세스 소유자 여야합니다. 따라서 다른 사용자로 실행중인 프로세스의 경우 앞에 추가하는 sudo것이 가장 필요합니다. 또한 최신 Linux 시스템에서는 다음 ss을 수행하는 데 사용되는 도구입니다.

$ sudo ss -lptn 'sport = :80'
State   Local Address:Port  Peer Address:Port              
LISTEN  127.0.0.1:80        *:*                users:(("nginx",pid=125004,fd=12))
LISTEN  ::1:80              :::*               users:(("nginx",pid=125004,fd=11))

현재 사용중인 것과 동일한 호출을 사용할 수도 있지만 다음 사항을 기억하십시오 sudo.

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

lsof를 사용할 수도 있습니다 :

$ sudo lsof -n -i :80 | grep LISTEN
nginx   125004 nginx    3u  IPv4   6645      0t0  TCP 0.0.0.0:80 (LISTEN)

36
참고 : OSX에서 -p옵션은 프로세스가 아닌 프로토콜에 대한 것입니다. 이 질문
Bryan P

3
@BryanP OP는 우분투를 요청하여 다소 관련이 없습니다.
Adam B

43
@AdamB Mac 사용자가 여기에 도착하지 않는 한Finding the PID of the process using a specific port
mraaroncruz

2
이 답변은 아마도 sudo맨 위에 필요성을 두어 개선 될 것입니다 .
Nacht

2
@MrOnyancha 간결한 (-t) 옵션 사용lsof -ti tcp:80
Mohnish

138

또한 lsof유틸리티 를 사용할 수 있습니다 . 루트 여야합니다.

# lsof -i :25
COMMAND  PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
exim4   2799 Debian-exim    3u  IPv4   6645      0t0  TCP localhost:smtp (LISTEN)
exim4   2799 Debian-exim    4u  IPv6   6646      0t0  TCP localhost:smtp (LISTEN)

9
이 명령은 또한 프로세스 established뿐만 아니라 연결 이있는 프로세스도 제공합니다 listening.
firelynx

1
반드시 루트 일 필요는 없습니다. 그리고 PID 만 가져 오려는 사람들에게는 다음 lsof -i :25 -Fp과 같은 출력을 생성 할 수 있습니다 p1234.
Robert

12

나는이 아니다 "CentOS는 최소 7"사용하고 netstat어느 쪽도 lsof. 그러나 많은 Linux 배포판에는 socket statistics 명령 (예 :)이 ss있습니다.

실행 예는 다음과 같습니다.

# ss -tanp | grep 6379
LISTEN   0    128  127.0.0.1:6379   *:*   users:(("redis-server",pid=2531,fd=4))

1
참조ss -pntl 'sport = :6379'
스테판 Chazelas가에게

10

로 명령을 실행하면 sudo당신에게 줄 것이다 PID. 내 개발 머신에서 다음을 얻습니다.

$ netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      -

$ sudo netstat -nlp | grep 8080
tcp6       0      0 :::8080      :::*       LISTEN      16449/java

다른 답변에서 언급했듯이 ss또는 lsof명령을 사용할 수도 있습니다 .


로 명령을 실행 sudo디스플레이 프로세스 ID
오이겐 Konkov

그러나 PID 대신 sudo netstat -nlp | grep 34157여전히 표시 되면 어떻게 -합니까?
Eugen Konkov

8

또한 당신은 사용할 수 있습니다 fuser:

fuser -v -n tcp 22

출력 :

                     USER        PID ACCESS COMMAND
22/tcp:              root        598 F.... sshd

그것은 작동하지 않습니다 퓨저 -v -n tcp 80 , 심지어 sudo 시도
SuperKrish

1
참고 :이 필요한 sudo문제가되는 과정도 시작 된 경우sudo
laggingreflex

1
이것은 일반적으로 기억하는 것이 좋습니다. Linux의 명령은 일반적으로 명령이 Sudo로 실행되지 않는 한 root / sudo로 시작된 프로세스에 대한 정보를 제공하지 않습니다. 명령이 정상적으로 실행하기 위해 sudo가 필요하지 않은 경우에도 마찬가지입니다.
njfife
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.