web-dev-qa-db-ja.com

特定のポートを使用してプロセスのPIDを見つけますか?

Ubuntuシステムに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

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