특정 포트를 사용하여 프로세스의 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.