如何parsingnetstat命令以获取进程名称和PID?

我试图确定什么应用程序正在使用某个端口,并获得netstat -tlnp | grep <port> for Linux netstat -tlnp | grep <port> for Linux

该命令返回以下输出:

 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 0.0.0.0:<port> 0.0.0.0:* LISTEN 3591/java 

我只需要得到进程和PID的名字,即java 3591。

什么是最好的办法呢?

谢谢。

尝试

 ps -p $(lsof -ti tcp:80) o comm=,pid= 

要么

 netstat -tlnp | awk '/:80 */ {split($NF,a,"/"); print a[2],a[1]}' 

(从你的原始问题稍微剥离),找出哪个进程监听某个端口号,我通常使用lsof命令。 例如:

 lsof -i tcp:80 

要仅显示进程名称和PID,请使用以下命令解析输出:

 lsof | tail -n +2 | awk '{print $1 " " $2}' 

tail命令跳过输出标题,而awk输出所需的列。

为什么?

试图grep netstat的输出可能是混乱的,因为你需要确保你匹配正确的列。 一个强大的解决方案可以相当长的时间和困难(对我来说)按需生产。

lsof可以节省你匹配正确端口的麻烦,并且还有很多其他用途,比如我们现在正在做的事情(找出进程正在使用哪个端口),或者确定哪个进程正在使用文件/挂载点(或反转)。 有关更多示例,请参阅lsof联机帮助页 。

awk + ​​sed:

 awk '{print $7}' | sed "s/\// /g" 

... | awk '{print $7;}'| sed 's/\// /g'

你也可以通过将stderr重定向到/ dev / null来摆脱“你必须成为root”的信息

 netstat -tlnp 2>/dev/null | grep ... 
 netstat -tlnp 2>/dev/null | awk '/\.[0-9]:X/ {print $7}' | sed 's/\//\s/g' 

awk位中的X是您正在查看的端口。

尝试netstat -p

-p,–program显示每个套接字所属程序的PID和名称。