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
프로그램입니다.
보기
netstat
명령은 많은 운영 체제에서 작동하여이를 얻을 수 있습니다. 알려진 각 열린 포트를 따라 pid를 표시 할 인수를 찾아야합니다.