8000
。运行以下命令时,出现此错误:
> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use
如果使用其他端口(默认端口
8000
),则Web服务器可以正常运行。如果从命令行运行
wget localhost:8000
,它将返回404 Not Found
。我该怎么办? (或可用的工具)来查找正在端口
8000
上监听的程序,并从那里配置该程序?#1 楼
打开终端并输入lsof -i :8000
该命令将列出您该端口使用PID的应用程序。
(如果没有结果通过
sudo
运行,因为可能对某些进程没有权限。)例如,使用端口8000(python3 -m http.server
):$ lsof -i :8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 3269 user 3u IPv4 1783216 0t0 TCP *:8000 (LISTEN)
和端口22(SSH) :
$ sudo lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 998 root 3u IPv4 1442116 0t0 TCP *:ssh (LISTEN)
sshd 998 root 4u IPv6 1442118 0t0 TCP *:ssh (LISTEN)
希望有帮助。
#2 楼
您可以使用netstat查看哪个进程正在侦听哪个端口。您可以使用此命令来获取完整的详细信息:
sudo netstat -peanut
如果您需要确切地知道哪个正在监听8000端口,可以使用此方法:
sudo netstat -peanut | grep ":8000 "
没有可以隐藏在netstat中的进程。
评论
netstat -peanut比netstat -taupen更容易记住!
–道格拉斯·B·斯台普(Douglas B. Staple)
15年8月31日在12:34
好一个! -刚编辑答案以反映您的评论。谢谢。
– Antoine Rodriguez
2015年9月1日下午16:48
'fuser -k 8000 / tcp'释放该端口
–杰伊·莫迪(Jay Modi)
16年2月19日在13:00
如果在“ PID /程序名称”列中看到的是破折号而不是进程名称,则您忘记添加“ sudo”
–v.shashenko
17年2月9日在11:29
所以是花生
– prusswan
17年2月22日在3:16
#3 楼
要详细说明@ 33833的答案,您可以获取一些非常详细的信息,例如:实际上,我的squid-deb-proxy
占用了端口。Java应用程序的另一个很好的示例:
$ lsof -i :8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
squid3 1289 proxy 15u IPv6 14810490 0t0 TCP *:8000 (LISTEN)
$ ps -fp 1289
UID PID PPID C STIME TTY TIME CMD
proxy 1289 1 0 09:48 ? 00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf
您可以在
lsof
中看到(LiSt打开文件),它是java,没有帮助。使用PID运行ps
命令,我们可以立即看到它是CrashPlan。评论
在一个命令中:lsof -t -i:8000 | xargs ps -fp
–布雷特Y
2014年8月13日在23:41
我必须在sudo前面加上前缀,但之后对我有用。谢谢。
– Dwayne Crooks
16-09-10 21:25
注意:没有sudo,您不会收到错误,简单的响应也不会得到任何结果。
–弗兰克·诺克(Frank Nocke)
17年1月6日在10:52
#4 楼
尝试使用来自ss
软件包的iproute2
:ss -nlp | grep 8000
评论
ss还具有自己的过滤功能:ss -nlp'(sport =:8000)'。
– GnP
2014年12月9日21:21
#5 楼
使用来自socklist
软件包中的procinfo
的另一种方法: inode,uid,pid,fd及其所属的程序。
man socklist
type port inode uid pid fd name
tcp 53 28749 0 1721 5 dnsmasq
tcp 631 29190 0 2433 11 cupsd
tcp 42376 82230 1000 1345 84 firefox
tcp 49048 71686 1000 1345 67 firefox
tcp 41248 81672 1000 1345 119 firefox
tcp 54676 84558 1000 1345 73 firefox
udp 56107 66258 0 3268 20 dhclient
udp 40804 17857 107 679 14 avahi-daemon
udp 53 28748 0 1721 4 dnsmasq
udp 68 67427 0 3268 6 dhclient
udp 631 19692 0 765 8 cups-browsed
udp 5353 17855 107 679 12 avahi-daemon
#6 楼
您可以使用nmap。了解您的PC中打开了哪些端口非常重要,这不仅对Linux有用,而且对其他操作系统也有用。
Linux有很多工具可以检查哪些端口是打开的,最常见的是nmap,它是命令行工具,但是如果您愿意,也可以使用
图形化的前端。 >
要安装它,只需按键盘上的Ctrl + Alt + T即可打开终端。打开后,运行以下命令:
sudo apt-get install nmap
有关nmap和其他实用程序的更多信息,请转到此处
1Source:garron。我
评论
nmap只会告诉您哪个端口已打开,而不是哪个进程打开了它。
–安德鲁·伯恩斯(Andrew Burns)
14年6月17日在15:49
我单击浏览您的源代码以阅读[nmap]试图猜测每个端口上正在侦听的服务,但是在建议一种实际方法来找出哪个进程拥有套接字之前,它可能会出错。
– GnP
2014年12月9日在21:24
@gnp您可能还想看看This。
– Mitch♦
2014年12月10日下午6:15
@米奇我做到了。 OP需要知道本地系统上进程的确切PID。 Nmap在这里不是正确的工具,甚至没有服务和版本检测。它要么与nmaps数据库中的一个项目相匹配,要么仍然让OP知道要终止或重新配置哪个进程,要么不做,OP不会有一个不错的指纹和指向insecure.org的链接
– GnP
2014-12-10 14:10
#7 楼
由于社区的低谷,我无法在此处发表评论。没有
sudo
的上述所有命令都不会为您提供进程ID /程序名称。因此,您需要输入以下内容:
sudo lsof -i :8000
或
sudo netstat -lntup
您可以通过
man
,help
或我最喜欢的助手查看这些命令的详细信息#8 楼
这是一个容易记住的命令ss -townlup
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
icmp6 UNCONN 0 0 *%eth0:58 *:*
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
udp UNCONN 0 0 172.31.26.71%eth0:68 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:443 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 128 [::]:443 [::]:*
tcp LISTEN 0 100 *:9090 *:* users:(("java",pid=13008,fd=16))
tcp LISTEN 0 100 *:8080 *:* users:(("java",pid=11556,fd=12))
评论
这也可以在OSX上发挥作用,.....
–贪婪
2014年3月11日在12:36
添加-s TCP:LISTEN会将结果限制为实际的侦听套接字及其过程。
– jhermann
2015年5月12日14:27
如果搜索端口8000,它将返回PID 1889? at
–科迪·布格斯坦(CodyBugstein)
2015年10月1日在21:19
是的,使用端口8881的PID 1889有服务。我丢失了什么吗?
–rɑːdʒɑ
2015年10月5日,11:26
@表示示例搜索端口8881。PID列包含进程ID,而NAME列包含端口。
– Freek de Bruijn
2015年10月11日在8:42