我通过 mono 运行几个不同的服务,每个服务都有自己的端口,但是当我使用 netstat 检查哪些已分配端口而哪些没有分配时,我得到的只是 2 个名为“mono”的进程,无法分辨除了查看端口之外,有时可能会发生变化。
是否可以让 netstat 显示每个端口的“命令”,就像 htop 对进程所做的那样?
这样我就可以分辨出哪个进程是哪个进程。
这需要一些工作,但我已经成功创建了一个过滤器来附加程序的参数列表:
netstat -p | while l="$(line)";\
do p="$(sed -En 's/^.*( [0-9]+)\/[^ ]*.*/\1/gp'<<<"$l")";\
[ "$p" == "" ] || p=" ## $(ps -p $p -o cmd=)";\
echo "$l"$p;\
done
Run Code Online (Sandbox Code Playgroud)
笔记:
;\不需要尾随字符串)。netstat写入管道时会进行缓冲,因此过滤器开始处理行之前会出现延迟。exec之间发生其他情况。netstatpsps显示。arg0line命令:如果您替换while l=($line)为更常用的while read -r l,这将修剪前导和尾随空格;当您需要保留它们时,您可以使用while read -r, 进行$REPLY替换$l(或while read -r; do l="$REPLY"; ...完全相同的情况,保持$l不变)。netstat,使用从任何数字/字符串sed序列中提取 PID ,然后使用该 PID 来查找命令参数。ps -pecho "$l"$p,$p位于引号之外:这是为了删除尾随空格(也是wine程序的问题),但它会产生将参数中的多个空格压缩为单个空格的副作用。