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


392

Ubuntuシステムにhadoopをインストールしています。起動すると、ポート9000がビジーであると報告されます。

私が使用した:

netstat -nlp|grep 9000

そのようなポートが存在するかどうかを確認し、私はこれを得ました:

   tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN

しかし、それを保持しているプロセスのPIDを取得するにはどうすればよいですか?




netstatコマンドは、多くのオペレーションシステムで機能し、それを取得できる可能性があります。開いている既知の各ポートに沿ってpidを表示することを保証する引数を見つける必要があります。
ルチアーノ

回答:


474

Linuxでは、必要な情報を取得するには、rootまたはプロセスの所有者である必要があります。したがって、別のユーザーとして実行されているプロセスの場合、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)

36
注:OSXでは、-pオプションはプロセスではなくプロトコル用です。この質問を
ブライアンP

3
それは...ちょっと無関係ですので、OP @BryanPのUbuntuを求めた
アダムBを

43
@AdamB Macユーザーがここに到着して検索しない限りFinding the PID of the process using a specific port
-mraaroncruz

2
この答えは、おそらく必要性をsudo一番上に置くことによって改善されるでしょう。
ヨット

2
@MrOnyancha簡潔な(-t)オプションを使用lsof -ti tcp:80
--Mohnish

138

また、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)

9
このコマンドはestablished、プロセスであるだけでなく、接続を持つプロセスも提供しますlistening
firelynx

1
必ずしもルートである必要はありません。また、PIDのみを取得したい場合はlsof -i :25 -Fp、のような出力を生成できますp1234
ロバート

12

私は「CentOS 7 minimal」を使用してnetstatlsofますが、これはありません。しかし、多くのLinuxディストリビューションには、ソケット統計コマンド(つまりss)があります。

実行の例を次に示します。

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

1
参照ss -pntl 'sport = :6379'
ステファンシャゼラス

10

でコマンドを実行すると、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 としてコマンドを実行
Eugen Konkov

しかし、PIDの代わりにsudo netstat -nlp | grep 34157まだ表示される場合はどう-でしょうか?
オイゲンコンコフ

8

また、使用することができますfuser

fuser -v -n tcp 22

出力 :

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

それは働いていない定着-v -n tcpの80でも、私は、sudoで試す
SuperKrish

1
注:これはsudo、問題のプロセスも開始された場合に必要ですsudo
-laggingreflex

1
これは一般的に覚えておくと良いことです。Linuxのコマンドは通常、コマンドがSudoで実行されない限り、root / sudoによって開始されたプロセスに関する情報を提供しません。これは、コマンドを正常に実行するために通常sudoを必要としない場合でも当てはまります。
njfife
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.