确定使用端口的进程(无需 sudo)

确定使用端口的进程(无需 sudo)

我想找出哪个进程(特别是进程 ID)正在使用给定端口。唯一的问题是,我不想使用 sudo,我也没有以 root 身份登录。我希望它工作的进程由我想要查找进程 ID 的同一用户运行 - 所以我认为这很简单。

lsof除非我使用 sudo 运行它们,否则和都netstat不会告诉我进程 ID - 但它们会告诉我端口正在被使用。

作为一些额外的背景信息 - 我有各种应用程序都通过 SSH 连接到我管理的服务器,并创建反向端口转发。设置完成后,我的服务器使用转发的端口进行一些处理,然后可以终止连接。如果我可以将特定端口(每个应用程序都有自己的端口)映射到进程,这是一个简单的脚本。有什么建议吗?

顺便说一下,这是在 Ubuntu 机器上 - 但我猜任何解决方案都会成为大多数 Linux 发行版的标准。

答案1

netstat选项--program可显示您自己的进程的 PID 和名称。此选项在 RHEL 6 的 netstat 1.42(net-tools 1.60 中)中存在并可正常工作。

我已经验证可以netstat -an --tcp --program显示我的进程的 PID。

答案2

Pawel 的建议对我来说似乎很有效,但作为替代方案,这是我从 shell1 听到的:

[madhatta@risby ~]$ nc -l  localhost 3456

以下是我lsof从 shell2 看到的内容:

[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)

您能否向我们展示一些您的示例输出(最好不要进行太多删改)?

相关内容