我正在使用 AWS linux / RHEL,我正在尝试识别并删除占用端口的僵尸 PID,以确保应用程序服务的干净启动/停止。
man lsof -i :会给我“其互联网地址的文件列表” 与 i 中指定的地址匹配。”因此在本例中是我当前主机的 .
[sas@hostname init.d]$ sudo lsof -i:8983
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 4670 solr 154u IPv6 25276 0t0 TCP *:8983 (LISTEN)
man ss -lp 将为我提供所有侦听端口及其关联 PID 的“套接字统计信息”。
[sas@hostname init.d]$ sudo ss -lp 2>/dev/null | grep 8983
tcp LISTEN 0 50 *:8983 *:* users:(("java",pid=4670,fd=154))
我希望两者始终匹配,那么这是怎么回事?
[sas@hostname init.d]$ sudo ss -lp 2>/dev/null | grep 8080
[sas@hostname init.d]$
[sas@hostname init.d]$ sudo lsof -i:8080 | grep -v CLOSE_WAIT
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 17493 sas 469u IPv6 71422 0t0 TCP *:webcache (LISTEN)
java 17493 sas 689u IPv6 282980 0t0 TCP localhost:webcache->localhost:60754 (ESTABLISHED)
java 26885 sas 1160u IPv6 286908 0t0 TCP localhost:60754->localhost:webcache (ESTABLISHED)
## Showing that ss does grab this webcache thing:
[sas@hostname init.d]$ sudo ss -lp 2>/dev/null | grep web
tcp LISTEN 0 100 *:webcache *:* users:(("java",pid=17493,fd=469))
ss是不是少了什么?我在寻找错误的东西吗?为什么lsof抓到端口而ss抓不到监听端口?
您正在 grep 端口上的
ss
输出。默认情况下,ss
(以及大多数其他工具)输出服务名称而不是端口号。显然端口 8080 映射到了 webcache 服务名称。
使用
ss --numeric
输出端口号。