(或带有lsof的参数的某些变体),我可以确定哪个进程绑定到特定端口。如果我要启动要绑定到8080的东西,而其他人已经在使用该端口,但是我不知道该怎么办,这很有用。
是否有一种简单的方法这不使用lsof?我花时间在许多系统上工作,而lsof却常常没有安装。
#1 楼
netstat -lnp
将在每个侦听端口旁边列出pid和进程名称。这将在Linux上运行,但不适用于所有其他操作系统(例如AIX。)如果仅需要TCP,则添加-t
。# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:24800 0.0.0.0:* LISTEN 27899/synergys
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 3361/python
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2264/mysqld
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 22964/apache2
tcp 0 0 192.168.99.1:53 0.0.0.0:* LISTEN 3389/named
tcp 0 0 192.168.88.1:53 0.0.0.0:* LISTEN 3389/named
等。
#2 楼
在AIX上,netstat和rmsock可用于确定进程绑定:[root@aix] netstat -Ana|grep LISTEN|grep 80
f100070000280bb0 tcp4 0 0 *.37 *.* LISTEN
f1000700025de3b0 tcp 0 0 *.80 *.* LISTEN
f1000700002803b0 tcp4 0 0 *.111 *.* LISTEN
f1000700021b33b0 tcp4 0 0 127.0.0.1.32780 *.* LISTEN
# Port 80 maps to f1000700025de3b0 above, so we type:
[root@aix] rmsock f1000700025de3b0 tcpcb
The socket 0x25de008 is being held by process 499790 (java).
评论
谢谢你!但是,有没有一种方法可以只显示套接字上监听的进程(而不是使用rmsock尝试删除该进程)?
–奥利维尔·杜拉克(Olivier Dulac)
2013年9月18日下午4:05
@OlivierDulac:“与其名称含义不同,如果某个进程正在使用rmsock,则rmsock不会删除该套接字。它仅报告持有该套接字的进程。” (ibm.com/developerworks/community/blogs/cgaix/entry/…)
–Vitor Py
2013年9月26日14:18在
@ vitor-braga:啊,谢谢!我以为它正在尝试,但只是说什么进程在无法删除时就一直存在。显然,当进程持有它时,它甚至不会尝试删除它。这很酷!谢谢!
–奥利维尔·杜拉克(Olivier Dulac)
2013年9月26日16:00
#3 楼
Linux上可用的另一个工具是ss。在Fedora的ss手册页中:NAME
ss - another utility to investigate sockets
SYNOPSIS
ss [options] [ FILTER ]
DESCRIPTION
ss is used to dump socket statistics. It allows showing information
similar to netstat. It can display more TCP and state informations
than other tools.
下面的示例输出-最后一列显示了进程绑定:
[root@box] ss -ap
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::http :::* users:(("httpd",20891,4),("httpd",20894,4),("httpd",20895,4),("httpd",20896,4)
LISTEN 0 128 127.0.0.1:munin *:* users:(("munin-node",1278,5))
LISTEN 0 128 :::ssh :::* users:(("sshd",1175,4))
LISTEN 0 128 *:ssh *:* users:(("sshd",1175,3))
LISTEN 0 10 127.0.0.1:smtp *:* users:(("sendmail",1199,4))
LISTEN 0 128 127.0.0.1:x11-ssh-offset *:* users:(("sshd",25734,8))
LISTEN 0 128 ::1:x11-ssh-offset :::* users:(("sshd",25734,7))
#4 楼
对于Solaris,可以使用pfile,然后通过sockname:
或port:
使用grep。示例(从此处):
pfiles `ptree | awk '{print }'` | egrep '^[0-9]|port:'
#5 楼
我曾经试图确定某个特定端口背后的进程(这次是8000)。我尝试了各种lsof和netstat,但随后尝试了一次尝试,并尝试通过浏览器(即http:// hostname:8000 /)访问该端口。瞧,一个启动屏幕迎接了我,很明显该过程是什么(据记录是Splunk)。还有一个想法:“ ps -e -o pid,args”(YMMV)有时可能在参数列表中显示端口号。 Grep是你的朋友!
评论
同样,您可以使用telnet主机名8000,并查看服务器是否打印横幅。但是,当服务器在没有外壳程序访问权限的计算机上运行,然后发现进程ID不相关时,这最有用。
–吉尔斯'所以-不再是邪恶的'
2011年5月8日14:45
评论
太好了,谢谢。看起来可以在RHEL上运行,但不能在Solaris上运行(如您所述)。有人知道Solaris是否有类似的东西吗?
–user5721
2011年3月14日在21:01
上面的netstat -p是我的投票。也看看lsof。
– Rich Homolka
2011-3-15在19:56
顺便说一句,对于Windows,它类似于:netstat -aon |更多
–乔纳森
14年8月26日在18:50
SCTP呢?
– sudo
17年5月25日在2:24