我想找出哪个进程(特别是进程ID)使用给定的端口。 一个问题是,我不想使用sudo,也不是以root身份login。 我想要这个工作的进程是由同一个用户运行,我想find进程ID – 所以我会认为这很简单。
lsof和netstat都不会告诉我进程ID,除非我使用sudo运行它们 – 它们会告诉我端口正在被使用。
作为一些额外的上下文 – 我有各种应用程序都通过SSH连接到我pipe理的服务器,并创build反向端口转发。 一旦这些设置完成,我的服务器会使用转发的端口进行一些处理,然后可以终止连接。 如果我可以映射特定的端口(每个应用程序都有自己的)进程,这是一个简单的脚本。 有什么build议么?
顺便说一下,这是在Ubuntu的盒子上 – 但我猜测任何解决scheme都是大多数Linux发行版的标准。
netstat的--program选项显示您自己的进程的PID和名称。 这个选项是存在的,并且在networking工具1.60中,在netstat 1.42中的RHEL 6上工作。
我validation了netstat -an --tcp --program显示我的进程的PID。
帕维尔的build议似乎对我来说很好,但作为一个替代scheme,这里是我从shell1听:
[madhatta@risby ~]$ nc -l localhost 3456
这里是我用shell2的lsof来看它:
[madhatta@risby tmp]$ lsof -i tcp:3456 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nc 18109 madhatta 3u IPv4 69205153 0t0 TCP localhost.localdomain:vat (LISTEN)
编辑 :你写在评论中
SSH转发必须有不同的行为 – 即使这个进程是由同一个用户拥有的,除非我以root / sudo方式运行它,否则在lsof输出中我看不到它。
但是这不是对我来说。 使用ssh转发本地端口8001,用ssh vpn.example.com -L 8001:rt.int:80 ,然后我发现:
[madhatta@risby ~]$ lsof -n -i tcp:8001 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 5375 madhatta 8u IPv6 381234 0t0 TCP [::1]:vcom-tunnel (LISTEN) ssh 5375 madhatta 9u IPv4 381235 0t0 TCP 127.0.0.1:vcom-tunnel (LISTEN)
你可能会告诉我们一些你的样本输出,最好不要太重的编辑?