Ubuntu 시스템에 hadoop을 설치하고 있습니다. 시작할 때 포트 9000이 사용 중이라고보고합니다.

다음을 사용했습니다.

netstat -nlp|grep 9000 

이러한 포트가 있는지 확인하고 나는 이것을 얻었다 :

 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 

하지만 그것을 보유하고있는 프로세스의 PID를 어떻게 얻을 수 있습니까?

코멘트

답변

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) 

댓글

  • 참고 : OSX에서는 -p 옵션은 프로세스가 아닌 프로토콜을위한 것입니다. 이 질문
  • @BryanP에서 OP가 Ubuntu를 요청하여 '는 관련이 없습니다 …
  • @AdamB Mac 사용자가 Finding the PID of the process using a specific port
  • 를 검색하여 여기에 도착하지 않은 경우

  • 이 답변은 sudo의 필요성을 맨 위에두면 개선 될 수 있습니다.
  • @MrOnyancha 간결한 (-t) 옵션 사용-lsof -ti tcp:80

답변

또한 유틸리티 ity. 루트 여야합니다.

# 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) 

설명

  • 이 명령은 established 연결, listening 인 프로세스뿐만 아니라.
  • 루트 일 필요는 없습니다. 그리고 PID 만 얻고 자하는 사람들은 lsof -i :25 -Fp를 통해 p1234와 같은 출력을 생성 할 수 있습니다.

답변

netstat

. 그러나 많은 Linux 배포판에는 소켓 통계 명령 (예 : ss)이 있습니다.

다음은 실행의 예입니다.

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

댓글

  • ss -pntl 'sport = :6379'

답변

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

fuser -v -n tcp 22 

출력 :

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

댓글

  • 그렇지 않습니다 ' fuser -v -n tcp 80 이 작동하지 않습니다. sudo로 시도해도
  • 참고 : sudo 문제가되는 프로세스가 sudo로 시작된 경우
  • 일반적으로 기억하는 것이 좋습니다. Linux의 명령은 일반적으로 ' 명령이 Sudo로 실행되지 않는 한 root / sudo로 시작된 프로세스에 대한 정보를 제공하지 않습니다. 명령이 정상적으로 실행되는 데 sudo가 필요하지 않은 경우에도 마찬가지입니다.

Answer

명령 실행 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 표시
  • 하지만 sudo netstat -nlp | grep 34157에 여전히 PID 대신 -가 표시되면 어떻게 될까요?

답변

저는 사용 가능한 Linux 도구 세트가 제한된 Yocto Linux 시스템에서 작업 중입니다. 다음 명령을 사용하여 실행중인 포트의 프로세스 (포트 1883을 사용하는 프로세스를 찾습니다) :

 root@root:~# netstat -lt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:hostmon 0.0.0.0:* LISTEN tcp 0 0 localhost.localdomain:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN tcp 0 0 :::hostmon :::* LISTEN tcp 0 0 localhost:domain :::* LISTEN tcp 0 0 :::ssh :::* LISTEN tcp 0 0 :::1883 :::* LISTEN root@root:~# fuser 1883/tcp 290 root@root:~# ps | grep 290 290 mosquitt 25508 S /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf 12141 root 8444 S grep 290  

위에서 볼 수 있듯이 포트 1883을 사용하는 것은 /usr/sbin/mosquitto 프로그램입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다