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)
また、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)
「netstat
」も「lsof
」もない「CentOS 7ミニマル」を使用しています。しかし、多くのLinuxディストリビューションには、ソケット統計コマンド(つまり、ss
)があります。
実行例は次のとおりです。
# ss -tanp | grep 6379
LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=2531,fd=4))
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
コマンドを使用することもできます。
また、fuser
を使用できます。
fuser -v -n tcp 22
出力 :
USER PID ACCESS COMMAND
22/tcp: root 598 F.... sshd