我使用了:得到了这个:
netstat -nlp|grep 9000
但是如何获取持有它的进程的PID?
#1 楼
在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选项用于协议而不是进程。看到这个问题
–布莱恩·普(Bryan P)
16-4-10在16:51
@BryanP OP要求使用Ubuntu,所以这是无关紧要的...
–亚当B
16-09-21在14:26
@AdamB除非Mac用户到达此处,否则将使用特定端口搜索查找进程的PID
–mraaroncruz
16-10-10在11:05
可以通过将sudo放在顶部来改善此答案。
–纳赫特
17年1月6日在1:10
@MrOnyancha使用简洁(-t)选项-lsof -ti tcp:80
– Mohnish
17年7月19日在13:58
#2 楼
您也可以使用lsof
实用程序。需要成为root用户。# 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)
评论
此命令还将为您提供已建立连接的进程,而不仅仅是正在侦听的进程。
– firelynx
15年8月18日在10:10
不一定要扎根。而且,对于只希望获得PID的用户,可以使用lsof -i:25 -Fp,它会产生类似p1234的输出。
–罗伯特
17 Mar 9 '17 at 10:27
#3 楼
我正在使用既没有netstat
也没有lsof
的“ CentOS 7 minimal”。但是许多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'
–StéphaneChazelas
16年11月27日在17:30
#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
命令。评论
运行命令作为sudo显示进程ID
– Eugen Konkov
18年5月10日在8:10
但是,如果sudo netstat -nlp | grep 34157仍然显示-而不是PID?
– Eugen Konkov
18年5月10日在8:16
#5 楼
也可以使用fuser
:fuser -v -n tcp 22
输出:
USER PID ACCESS COMMAND
22/tcp: root 598 F.... sshd
评论
它不起作用热熔器-v -n tcp 80,即使我尝试使用sudo
– SuperKrish
16 Dec 2'在5:42
注意:如果违规程序也以sudo启动,则需要sudo
–滞后反射
17年1月21日在8:14
通常要记住这是一件好事。除非该命令与Sudo一起运行,否则Linux中的命令通常不会提供有关由root / sudo启动的进程的信息。即使该命令通常不需要sudo才能正确运行,也是如此。
– njfife
17年7月6日在21:15
#6 楼
我正在使用Yocto Linux系统,该系统具有一组有限的可用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
pre >
正如我们在上面看到的,使用端口1883的程序是/usr/sbin/mosquitto
。
评论
看到这个wilddiary.com/find-the-process-using-a-given-port在SU上回答–查找在Linux中使用特定端口的进程
netstat命令可能在许多操作系统中都可以使用,您只需找到可以确保它将在每个已知打开的端口上显示pid的参数即可。