我有一个监听 2 个端口的进程:45136/tcp 和 37208/udp(实际上我认为这是同一个进程)。但 netstat 不返回任何 pid :
netstat -antlp | grep 45136
tcp 0 0 0.0.0.0:45136 0.0.0.0:* LISTEN -
与“grep 37208”的结果相同。
我也尝试过 lsof :
lsof -i TCP:45136
但它不返回任何东西。这是挤压的新安装,我真的不知道这个过程会是什么。任何想法 ?
回答 感谢您的评论,我知道它是什么。我卸载了 nfs-server nfs-common (在 dkpg --get-selections | grep nfs 搜索之后)并且未知进程消失了。奇怪的是,内核进程没有以任何方式标记。
再次感谢你们俩。 ;)
答案1
网络统计
那里有一个进程,你的用户 ID 只是不知道它是什么。这是由它提供的一层保护,lsof
可以防止您看到这一点。只需重新运行该命令,但使用该sudo
命令作为前缀即可。
$ sudo netstat -antlp | grep 45136
lsof
在顶部的输出中甚至有关于此的警告。
(并非所有进程都能被识别,非拥有的进程信息将不会显示,您必须是 root 才能看到全部。)
例子
$ netstat -antlp | grep 0:111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
$ sudo netstat -antlp | grep 0:111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1248/rpcbind
SS
如果你运气不好,netstat
也许ss
可以。您仍然需要使用sudo
,并且输出可能会更加神秘。
例子
$ ss -apn|grep :111
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
$ sudo ss -apn|grep :111
LISTEN 0 128 :::111 :::* users:(("rpcbind",1248,11))
LISTEN 0 128 *:111 *:* users:(("rpcbind",1248,8))
进程ID还没有出现吗?
在某些情况下,根本没有与正在使用的 TCP 端口关联的 PID。您可以阅读有关 NFS 的内容,位于@derobert 的回答,这是其中之一。还有其他的。我在某些情况下使用 ssh 隧道连接回 IMAP 等服务。这些也显示没有进程 ID。
在任何情况下,您都可以使用更详细的形式,netstat
这可能会进一步说明最终使用 TCP 端口的进程。
$ netstat --program --numeric-hosts --numeric-ports --extend
例子
$ netstat --program --numeric-hosts --numeric-ports --extend |grep -- '-' | head -10
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 192.168.1.103:936 192.168.1.3:60526 ESTABLISHED root 160024310 -
tcp 0 0 192.168.1.1:2049 192.168.1.3:841 ESTABLISHED sam 159941218 -
tcp 0 0 127.0.0.1:143 127.0.0.1:57443 ESTABLISHED dovecot 152567794 13093/imap-login
tcp 0 0 192.168.1.103:739 192.168.1.3:2049 ESTABLISHED root 160023970 -
tcp 0 0 192.168.1.103:34013 192.168.1.3:111 TIME_WAIT root 0 -
tcp 0 0 127.0.0.1:46110 127.0.0.1:783 TIME_WAIT root 0 -
tcp 0 0 192.168.1.102:54891 107.14.166.17:110 TIME_WAIT root 0 -
tcp 0 0 127.0.0.1:25 127.0.0.1:36565 TIME_WAIT root 0 -
tcp 0 0 192.168.1.1:2049 192.168.1.6:798 ESTABLISHED tammy 152555007 -
如果您注意到输出包含 INODES,那么我们可以使用此信息回溯到该过程。
$ find -inum 152555007
这将向您显示一个可能引导您进入流程的文件。
参考
答案2
另一种选择是套接字不属于进程,它属于内核。一个常见的例子是 NFS。
Watt:~# netstat -ltp | egrep -- '-[[:space:]]*$'
tcp 0 0 *:nfs *:* LISTEN -
tcp 0 0 *:48131 *:* LISTEN -
tcp6 0 0 [::]:55607 [::]:* LISTEN -
tcp6 0 0 [::]:nfs [::]:* LISTEN -
一般来说,我不确定识别这些的好方法。在NFS的特殊情况下,rpcinfo
往往能够告诉我们:
anthony@Watt:~$ rpcinfo -p | grep 48131
100021 1 tcp 48131 nlockmgr
100021 3 tcp 48131 nlockmgr
100021 4 tcp 48131 nlockmgr
不幸的是,这只适用于 IPv4。要获得 v6,您必须放弃-p
,然后它会以一种愚蠢的方式显示端口号:作为 IP 地址的两个附加八位字节。端口 55607 因而变为217.55(因为217 × 256 + 55 = 55607):
anthony@Watt:~$ rpcinfo | grep -i 217.55
100021 1 tcp6 ::.217.55 nlockmgr superuser
100021 3 tcp6 ::.217.55 nlockmgr superuser
100021 4 tcp6 ::.217.55 nlockmgr superuser