我有一个应用程序的初始化脚本,并且知道可以从脚本中获取 PID。我正在尝试向 status 命令添加一些逻辑,以输出与 PID 关联的 TCP 侦听端口。我通读了以下问题的答案如何列出给定PID的所有当前网络连接?,但我仍然不确定哪个最适合这种情况。
这不是关键的,但我希望它尽可能地可移植,并确保它在无法运行时优雅地失败。到目前为止,我已经提出了几个替代方案,但我不确定哪个可能是最可移植的(两者都适用于我的测试环境),或者是否有更好的方法来实现这一点。
到目前为止,这是我想到的:
lsof -anP -i -p $APP_PID -sTCP:LISTEN -Fn | \
sed -e '/^n/ !d; /127.0.0.1/ d; s/n.*:\(.*\)/\1/' | sort -h | paste -s -d','
netstat -tlpn | grep $APP_PID | \
awk '$4!~/127.0.0.1/ {split($4,listener,":"); print listener[2]}' | \
sort -h | paste -s -d','
(我可能可以将 grep 放入 awk 中,但我对 awk 不太熟悉)
两者都输出一个列表,如下所示:
4500,9233,9475,27000
如果目标计算机上有一个命令与另一个命令可用,是否有任何好方法来测试我应该运行哪个命令?或者在可移植性方面,一种命令组合是否优于另一种命令组合? (您可以假设 Linux 目标,并且echo
脚本之外仅使用 LSB 定义的函数)