it-swarm-korea.com

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

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

나는 사용했다 :

netstat -nlp|grep 9000

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

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

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

427
wuchang

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)
529
Chris Down

또한 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)
143
Vitaliy

나는 netstatlsof도없는 "CentOS 7 minimal"을 사용하고 있습니다. 그러나 많은 Linux 배포판에는 소켓 통계 명령 (예 : ss)이 있습니다.

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

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

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 명령을 사용할 수도 있습니다.

12
isapir

또한 fuser를 사용할 수 있습니다 :

fuser -v -n tcp 22

출력 :

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