如何找到完整的进程参数和相关的监听端口?

如何找到完整的进程参数和相关的监听端口?

我可以执行netstat -atulpn | grep java以查找所有 Java 进程及其附带端口,这很棒,但是我还想显示进程的完整执行参数。从netstat我迄今为止探索的所有方面来看,我认为这是不可能的,因此我想我必须编写一个脚本来处理输出netstat,然后将 pid 传递进去ps,然后美化输出以显示 ip+port 和完整命令行。

有没有更好的方法可以做到这一点,或者这是唯一的选择?

答案1

ss -lnptu 通过调用 ps -p 传送到 awk。我使用的是移动设备,因此目前输入完整的示例有点困难。

监听套接字:

ss -lnptu | awk 'NR>1 { split($7,p,","); printf "Listen: "$5 " Command: "; system("ps --no-headers -o args p "p[2]); }'

所有套接字(由于套接字在 TIME_WAIT 中没有进程信息等,可能需要进行一些额外的过滤):

ss -anptu state listening state established state connected state unconnected | grep -v TIME_WAIT | awk 'NR>1 { split($7,p,","); printf "Listen: "$5 " Command: "; system("ps --no-headers -o args p "p[2]); }'

 

答案2

ps当我按原样使用 Mark Sturgill 的答案时,我在 Ubuntu 16.04 上收到错误。需要稍微修改一下才能使其工作:基本上添加了一个额外的内容split,以进一步将数字 PID 与返回的连接格式隔离开来ss(例如pid=1306 -> 1306)。我还添加了-ww标志以使 ps 输出完整参数:

ss -lnptu | awk 'NR>1 { split($7,p,","); split(p[2],pid,"="); printf "Listen: "$5 " Command: "; system("ps --no-headers -ww -o args p "pid[2]); }'

答案3

@ylluminate,对于 CentOS,将其更改为ss -lnptu | awk 'NR>1 { split($6,p,","); printf "Listen: "$4 " Command: "; system("ps --no-headers -o args p "p[2]); }'

相关内容