我试图确定什么应用程序正在使用某个端口,并获得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和名称。