我正在寻找列出 PID 当前正在侦听的所有端口。
您建议我如何获取有关流程的此类数据?
答案1
您可以使用ss
iproute2 包(类似于netstat
):
ss -l -p -n | grep "pid=1234,"
或(对于较旧的 iproute2 版本):
ss -l -p -n | grep ",1234,"
将 1234 替换为程序的 PID。
答案2
我不知道使用工具的方法iproute2
。但作为一种解决方法,您可以尝试一下这个。
lsof -Pan -p PID -i
应该为您提供您正在寻找的信息。
输出
lsof -Pan -p 27808 -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 27808 apache 5u IPv6 112811294 0t0 TCP *:80 (LISTEN)
httpd 27808 apache 7u IPv6 112811298 0t0 TCP *:8443 (LISTEN)
httpd 27808 apache 9u IPv6 112811303 0t0 TCP *:443 (LISTEN)
我从这里得到这个命令这里但不确定确切的链接,因为我已将所有内容都记在笔记本中。但您也可以从那里查看。
答案3
您可以使用netstat
它来找出每个监听进程的 pid。
netstat - 打印网络连接、路由表、接口统计信息、伪装连接和多播成员资格
-a, --all 显示侦听和非侦听(对于 TCP,这意味着已建立的连接)套接字。使用 --interfaces 选项,显示未标记的接口
--numeric , -n 显示数字地址,而不是尝试确定符号主机、端口或用户名。
-p, --program 显示每个套接字所属程序的 PID 和名称。
这是一个例子:
# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1507/rpcbind
tcp 0 0 0.0.0.0:51188 0.0.0.0:* LISTEN 1651/rpc.statd
tcp 0 0 0.0.0.0:1013 0.0.0.0:* LISTEN 1680/ypbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1975/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1763/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2081/master
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 2119/mongod
tcp 0 48 172.16.33.73:22 172.16.127.110:51850 ESTABLISHED 25473/sshd
tcp 0 0 172.16.33.73:22 172.16.127.110:51214 ESTABLISHED 24699/sshd
tcp 0 0 :::111 :::* LISTEN 1507/rpcbind
tcp 0 0 :::9200 :::* LISTEN 1994/java
tcp 0 0 :::9300 :::* LISTEN 1994/java
tcp 0 0 :::22 :::* LISTEN 1975/sshd
tcp 0 0 ::1:631 :::* LISTEN 1763/cupsd
tcp 0 0 ::1:25 :::* LISTEN 2081/master
tcp 0 0 :::59162 :::* LISTEN 1651/rpc.statd
答案4
lsof
如果您不知道 PID,只知道程序名称,还有另一种方法:
lsof -Pa -p $(pgrep [programName]) -i