0

我正在尝试使用 fuser 来查找我拥有的已打开某些 TCP 端口的进程的 pid。

在定影器手册页中它说:

... 最常见的问题是在以非 root 用户身份运行 fuser 时查找 TCP 或 UDP 套接字时。在这种情况下,定影器将报告无访问权限。...

但是,在我的 Ubuntu 机器上,fuser 确实报告了为我拥有的进程打开的套接字,例如:

perl -MIO::Socket 'IO::Socket::INET->new(Listen => 10, LocalPort => 3000)' &

定影器-n tcp 3000

问题:如何设置以允许这种情况发生?它是内核配置选项吗?

谢谢!

注意:问题是:如何配置一些 linux 发行版,以便当 fuser 以普通用户身份运行时,fuser 将报告拥有套接字的进程?如果我拥有该进程,一个 Ubuntu 发行版“fuser -n tcp 3000”将报告该进程,但在另一个 linux 发行版(我认为是 Centos)上,即使我拥有它也不会报告该进程。

4

1 回答 1

1

fuser遍历/proc文件系统 ( proc(5)) 处理/proc/[pid]/fd/目录并检查文件描述符。您拥有的进程具有您/proc再次拥有的相应条目。这使您可以检查您的流程,但不能检查其他流程。

查看给定程序在做什么的一个非常有用的工具是strace(1). 例如,您可以查看哪些系统调用以及使用哪些参数由以下命令完成fuser

~$ strace fuser -n tcp 3000
于 2011-02-07T19:38:09.197 回答