Ubuntuシステムにhadoopをインストールしています。起動すると、ポート9000がビジーであると報告されます。
使用したもの:
netstat -nlp|grep 9000
このようなポートが存在するかどうかを確認し、取得しました:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
しかし、それを保持しているプロセスのPIDを取得するにはどうすればよいですか?
コメント
回答
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)
コメント
- 注:OSXでは、
-p
オプションはプロセスではなくプロトコル用です。この質問 - @BryanPを参照してください。OPはUbuntuを求め、'ちょっと関係ありません…
- @AdamBMacユーザーが
Finding the PID of the process using a specific port
- この回答は、
sudo
を先頭に配置することで改善される可能性があります。 - @MrOnyancha簡潔な(-t)オプションを使用します-
lsof -ti tcp:80
を検索してここに到着しない限り
回答
util性。ルートである必要があります。
# 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)
コメント
- このコマンドは、
接続、
listening
であるプロセスだけではありません。 - 必ずしもルートである必要はありません。また、PIDのみを取得したい場合は、
lsof -i :25 -Fp
を使用できます。これによりp1234
のような出力が生成されます。
回答
「CentOS7minimal」を使用しています。netstat
もlsof
。ただし、多くのLinuxディストリビューションにはsocket statisticsコマンドがあります(つまり、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を必要としない場合でも当てはまります。
で開始された場合
回答
コマンドの実行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ツールのセットが限られているYoctoLinuxシステムで作業しています。なんとか見つけました次のコマンドを使用して実行中のポートのプロセス(ポート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が表示されるようにする引数を見つける必要があります。